首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在数据库设计中使用用户名作为主键是不是很糟糕?

在数据库设计中,使用用户名作为主键可能会导致以下问题:

  1. 性能问题:用户名通常是可变的,而且可能会包含特殊字符和空格,这可能会导致数据库在查询和排序时性能较差。
  2. 安全问题:用户名可能会泄露用户的敏感信息,从而增加数据泄露的风险。
  3. 可扩展性问题:如果用户名发生变化,例如用户更改用户名,那么数据库中的所有相关记录都需要更新,这可能会导致大量的数据更新操作。

因此,在数据库设计中,使用用户名作为主键并不是一个好的选择。一个更好的选择是使用自增长的整数作为主键,这样可以避免上述问题,并且可以提高数据库的性能和可扩展性。

推荐的腾讯云相关产品和产品介绍链接地址:

  1. 腾讯云数据库产品:https://cloud.tencent.com/product/dcdb
  2. 腾讯云MySQL:https://cloud.tencent.com/product/cdb
  3. 腾讯云PostgreSQL:https://cloud.tencent.com/product/postgres
  4. 腾讯云MongoDB:https://cloud.tencent.com/product/mongodb
  5. 腾讯云Redis:https://cloud.tencent.com/product/redis
  6. 腾讯云云数据库MySQL:https://cloud.tencent.com/product/cdb
  7. 腾讯云云数据库PostgreSQL:https://cloud.tencent.com/product/postgres
  8. 腾讯云云数据库MongoDB:https://cloud.tencent.com/product/mongodb
  9. 腾讯云云数据库Redis:https://cloud.tencent.com/product/redis
  10. 腾讯云云数据库TiDB:https://cloud.tencent.com/product/tidb
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

.NET ORM 的 “SOD蜜”--零基础入门篇

可以看到,SOD实体类还是比较简单的,它没有使用特性来申明数据库信息,这意味着你可以在运行时修改实体类影射的主键,自增字段,表名称等数据库元数据,并且不需要反射,这些特性构成了SOD框架简单而强大的基础.../// /// 使用用户名密码参数来登录,采用 EntityQuery 泛型查询方法 /// /// <param...3.5,操作符重载 OQLCompare 的操作符重载可以简化比较条件,如下所示: /// /// 使用用户名密码参数来登录,并使用操作符重载的查询条件比较方式.../// /// 使用用户名密码参数来登录,使用泛型OQL查询(GOQL),对于单实体类查询最简单的使用方式。.../// /// 使用用户名密码参数来登录,但是根据实体类的主键来填充实体类并判断是否成功。

1.2K70

HBase Schema 设计

HBase数据模型 HBase 数据模型与我们关系数据库中使用或了解的数据模型有很大不同。...默认情况下仅返回最新版本的数据,我们可以查询中请求多个版本的数据。可以认为行键等价于关系数据库表中的主键表创建后,我们不能选择其他列将作为行键。...如果 HBase 表作为键值存储来看,主键可以只是行键,或者是行键,列族,列限定符,时间戳的组合,具体取决于我们要寻址的单元。如果我们对一行中的所有单元都感兴趣,则主键是行键。...如果我们只关注指定单元,则需要将对应的列族和列限定符作为主键的一部分。 2. HBase表设计基础 正如上面强调的那样,HBase 数据模型与关系数据库系统完全不同。...现在,表中使用用户名作为列限定符,单元值可以是任意内容,因为单元不能是空的,需要我们存储点东西,所以输入数字1。 这种设计几乎解决了所有问题。在读取访问模式中,只剩下第三个问题’谁关注了用户A?’。

2.3K10
  • 数据库技术知识点总结之三——索引相关内容

    设计数据库的时候采用系统生成的键作为主键,那么实际控制了数据库的索引完整性。...这样,数据库和非人工机制就有效地控制了对存储数据中每一行的访问; 采用系统生成键作为主键还有一个优点:当拥有一致的键结构时,找到逻辑缺陷容易。...不要使用用户可以编辑的键:不让主键具有可更新性 确定采用什么字段作为表的键的时候,可一定要小心用户将要编辑的字段。通常的情况下不要选择用户可编辑的字段作为键。...中使用了,那么 ORDER BY 中就不要用了。...其它通配符同样,也就是说,查询条件中使用正则表达式时,只有搜索模板的第一个字符不是通配符的情况下才能使用索引。

    53320

    解读数据库对象分布

    这是学习笔记的第 1817篇文章 我们的工作中,其实我们对于自己所负责的数据库是不够清晰的,比如我们了解自己所负责的数据库中表,索引分布情况吗?...这些信息对于他来说,有没有用呢,其实是有的,如果一个数据库里存在上万张表,毫无疑问这是一种很糟糕设计方式了。...如果业务能够获得这些信息,他就不会像选择黑盒的处理方式一样不断的往里面填数据,这种改进是隐形的,另外我们制定了开发规范难以落地,一个原因就是信息不对称,你说这些信息是不是机密,显然不是,所以这些信息是我们可以共享给业务同学的...可以看到这个库中有700多张表,主键比例和表数据量持平,说明整体的设计还不错(当然从比例来看少部分表还是没有主键的),但是值得一提的是,整个数据库中的辅助索引比例过高,为什么加索引,本质上是为了查询快捷...可以看到,表和主键的比例基本持平,含有少量的辅助索引,还有一部分的存储过程,MySQL里面含有存储过程不是一种良好的设计,一种可能是遗留问题,一种就是涉及了一些复杂的业务逻辑,但是可以确定的是,这个库是很难以做分布式扩展的

    41510

    MySQL数据库4Python操作mysql、索引、慢查询日志

    ()增加多条数据 conn.commit()提交发送的SQL语句 对数据的增删改一定要提交,否则更改不成功,而且主键id还会增加,pycharm还不会报错,坑 print(cursor.lastrowid...id conn.commit()#对数据的增删改一定要提交,否则更改不成功,而且主键id还会增加,pycharm还不会报错,坑 cursor.close() conn.close() 1.4修改数据...:xxx ' or 1=1 #就可以将发送到mysql的指令改变以至于不用用户名和密码也能够获取用户的数据,如输入以后成了select * from user where name='xiaozhu'...如果主键是自增id,不能直接使用下面的方法删除,需要先将其修改为非自增id,然后再用下面的方法删除(这种情况实际应用中几乎不会出现)。...情况1 SQL语句中使用四则运算,会降低SQL的查询效率。 情况2 SQL语句中使用函数。

    1.9K20

    Access Control: Database(数据库访问控制)最新解析及完整解决方案

    漏洞危害 数据库访问控制是利用用户引入的参数生成由用户控制主键的 SQL 语句,令攻击者可以访问到同级别用户的资源或者访问更高级别用户的资源,会导致任意用户敏感信息泄露、用户信息被恶意修改或删除。...在上述修复代码中,第34行从 session 中直接获取到 id 的值构造查询语句,获得当前用户的清单数据,避免用户操控SQL语句的主键值。...2、该参数做数据库主键使用(这个数据用来指定 SQL 查询中主键的值。)...(使用一个与主键不一致的副id做相关操作) 例:图1的查询SQL语句 ? 图2中查询的org_id并未做主键id,而是作为的副id使用 ? 且图3中核对该主副id不一致 ?...如上示例代码:加入一个用户名(不推荐使用用户id)的查询限制,匹配用户对该条查询是否有所有权。

    8.8K30

    数据库设计指南之我见

    使用系统生成的主键 这一点类同技巧1,但我觉得有必要在这里重复提醒大家。假如你总是设计数据库的时候采用 系统生成的键作为主键,那么你实际控制了数据库的索引完整性。...这样,数据库和非人工机制就 有效地控制了对存储数据中每一行的访问。 采用系统生成键作为主键还有一个优点:当你拥有一致的键结构时,找到逻辑缺陷容易。...—teburlew 如果使用oracle数据库,那么我们就用Sequence来生成主键,如果使用mysql或者SQL Server,那么就使用NHibernate的Hilo生成,当然也使用用GUID来作为...不要用用户的键 确定采用什么字段作为表的键的时候,可一定要小心用户将要编辑的字段。通常的情况下不要 选择用户可编辑的字段作为键。...— Suhair TechRepublic 在数据库主键设计中使用Hilo或者GUID就是为了考虑分布式数据系统。这样的主键可以将多个分布数据库中的数据合并到一个系统中,而主键不会发生冲突。 3.

    43510

    30分钟如何学会使用Shiro

    同时,不仅可以web中使用,可以工作在任务环境内中。 2、acegi security灵活性较差,比较难懂,但与spring整合性好。...小编为小伙伴找到了一份不错的 shiro 教学视频 公众号 回复 “shiro” 获取 一、架构 要学习如何使用Shiro必须先从它的架构谈起,作为一款安全框架Shiro的设计相当精妙。...在数据库中需要因此建立5张表,分别是用户表(存储用户名,密码,盐等)、角色表(角色名称,相关描述等)、权限表(权限名称,相关描述等)、用户-角色对应中间表(以用户ID和角色ID作为联合主键)、角色-权限对应中间表...(以角色ID和权限ID作为联合主键)。...如果希望WEB环境中使用Shiro必须首先在web.xml文件中配置 <?xml version="1.0" encoding="UTF-8"?

    92350

    关于Int自增字段和GUID字段的性能测试。只有测试,没有分析,呵呵

    最近有两篇关于GUID和Int自增的文章,我是一直使用Int自增的,不习惯使用GUID,感觉GUID麻烦,用着不方便,性能也比不上Int自增。...主键、外键是Int自增 VS 主键、外键是GUID。       对比一下多表关联的情况下,二者的性能如何?       疑问:聚集索引是否都要设置到哪里?       ...第一组表用Int作为主键,第二组表以GUID作为主键。字段嘛,咱们就简单一点吧。 【客户信息表】 客户ID、客户名称、地址、添加时间。 其中 客户ID 是主键、聚集索引、 Int自增。...补充       终于把测试数据库给传上去了,原来是文件太大了,60M,空间不够了。但是郁闷,上传的时候没有准确的错误提示,我还以为是网速慢呢。收缩数据库,重新压缩,19M了。...欢迎您下载看看,是不是我哪里弄错了,还是其他的什么原因。哦,对了,还需要您看一下视图【V_B_客户合同信息】里面的排序字段,现在是按照添加时间排序的。

    1.1K100

    50多条实用mysql数据库优化建议

    非群集索引下,数据物理上随机存放在数据页上。合理的索引设计要建立在对各种查询的分析和预测上。...11.使用索引字段作为条件时,如果该索引是复合索引,那么必须使用到该索引中的第一个字段作为条件 时才能保证系统使用该索引, 否则该索引将不会 被使用, 并且应尽可能的让字段顺序与索引顺序相一致。...建议用用0、特殊值或空串代替NULL值 41....(以前,银行做过项目,见过一张表有100多个字段,恐怖) 示 例一:Users表中有一个字段是家庭地址,这个字段是可选字段,相比起,而且你在数据库操作的时候除了个人信息外,你并不需要经常读取或是改写这个字...这样会让你的表有更好的性能,大家想想是不是,大量的时候,我对于用户表来说,只有用户ID,用户名,口令,用户角色等会被经常使用。小一点的表总是会有 好的性能。

    4K60

    使用Python防止SQL注入攻击(上)

    本教程中,我们将学习: 什么是Python SQL注入以及如何防止注入 如何使用文字和标识符作为参数组合查询 如何安全地执行数据库中的查询 了解Python SQL注入 SQL注入攻击是一种常见的安全漏洞...result = cursor.fetchone() ... print(result) (2,) SQL中使用查询参数 在前面,我们创建了一个数据库,连接到了它,并执行了一个查询。...大家可能认为username只是表示实际用户名的字符串。但是,入侵者可以容易地利用这种疏忽,并通过执行Python SQL注入造成重大危害。...例如,如果大家登录页面中使用此函数,则入侵者可以使用用户名'登录;选择正确的;,他们将被允许进入。 更可怕的是了解表结构的入侵者可以使用Python SQL注入来造成永久性损害。...我们对用户名参数了解多少?我们只知道它应该是一个表示用户名的字符串,但是我们实际上并没有检查或执行这个断言。这可能危险!攻击者试图利用这些东西入侵我们的系统。

    4.1K20

    PHP没你想的那么差

    本文试着回答一些常见的关于 PHP 的断言,目的是向非技术人员解释,PHP 并不像许多人所说的那么糟糕。 1它是不是鼓励糟糕的实践? 不再是了。...通过使用框架避免了糟糕实践。 语言特性现在有很多讨论。糟糕的特性不再受到支持。 PHP 添加了其他语言中存在的大部分(即使不是全部)的特性。 2它的安全性是不是很差?...通过 SQL 中使用 prepared 语句,避免了 SQL 注入攻击(这是由于需要构建 SQL 查询并将查询和数据一起发送导致的,其中用户可以向查询中增加额外的 SQL 命令)。...网站慢通常不是由于使用的语言不够快,而是因为服务器或数据库导致的性能问题。 4它的伸缩性是不是真的很差? 实际上,任何语言都可以伸缩。...如果你能够扩展你的数据库,你就可以扩展你的应用程序。数据库比应用服务器更难扩展。增加另一个读取数据库的客户端容易;但是,让数据库快速运行要难得多。

    43040

    21个MySQL表设计的经验准则

    作为后端开发,我们经常需要设计数据库表。整理了21个设计MySQL表的经验准则,分享给大家,大家看完一定会有帮助的。...主键设计要合理 主键设计的话,最好不要与业务逻辑有所关联。有些业务上的字段,比如身份证,虽然是唯一的,一些开发者喜欢用它来做主键,但是不是建议哈。...我们设计表的时候,需要充分考虑一个字段的长度,比如一个用户名字段(它的长度5~20个字符),你觉得应该设置多长呢?可以考虑设置为 username varchar(32)。...分库:就是一个数据库分成多个数据库,部署到不同机器。 分表:就是一个数据库表分成多个表。 我们设计表的时候,其实可以提前估算一下,是否需要做分库分表。...应尽量避免where 子句中使用!

    1.7K21

    MySQL数据库设计

    软件项目开发周期中数据库设计 01.需求分析阶段:分析客户的业务和数据处理需求 02.概要设计阶段:设计数据库的E-R模型图,确认需求信息的正确和完整 03.详细设计阶段:应用三大范式审核数据库结构 04...数据库的备份 cmd进入命令行 mysqldump -u用户名 -p 数据库名称 >指定的文件 数据库的恢复 前提是必须要有对应的数据库  mysql -u用户名 -p <指定的文件 1. mysql...为DOS命令 2.执行该语句之前,必须在MySQL服务器中创建新数据库,如果不存在恢复数据库过程将会出错 关系型数据库和非关系型数据库  登录mysql   mysql  -h主机地址   -u用户名...第二范式第一范式的基础上,保证表中每列与主键相关。就是每张表只描述一件事情。...第三范式:满足第二范式基础上,保证表中除主键列外的其他列,都直接依赖于主键列,则符合第三范式 设计没有好坏,没有对错之分,所谓仁者见仁智者见智 1.MySQL的优势  1.运行速度快,  2.使用成本低

    2.6K110

    5G时代,如何彻底搞定海量数据库设计与实践

    5G时代,业务数据越来越丰富,业务使用MySQL数据库作为后台存储,存储引擎使用InnoDB,会带来哪些挑战?...如何针对公司业务特点及MySQL数据库特性,制定若干数据库使用规范供一线RD设计业务时参考部分内容要求强制执行。...通过上面的分析,我们是不是可以得出结论:使用自增主键一定好呢?我们分析完InnoDB的索引以前,现在下结论还有些早。...自增主键相对业务主键IO效率上优势SSD硬盘下几乎可以忽略,而在业务查询性能上业务主键有明显优势,所以在数据库中使用的都是业务主键。...三、业务表设计 针对MyQL数据库特性结合公司业务特点制定了一系列数据库使用规范,可以有效的指导一线RD项目开发过程中数据库表和索引的设计工作。

    47620

    深入浅出索引

    数据库查询是数据库的最主要功能之一。我们都希望查询数据的速度能尽可能的快,因此数据库系统的设计者会从查询算法的角度进行优化。...数据库系统的设计者巧妙利用了磁盘预读原理,将一个节点的大小设为等于一个页,这样每个节点只需要一次I/O就可以完全载入。...这个索引的key是数据表的主键,因此InnoDB表数据文件本身就是主索引 ? 这里以英文字符的ASCII码作为比较准则。...Innodb下主键索引是聚集索引,Myisam下主键索引是非聚集索引 ?...如果连接池中有空闲的连接线程,则分配给这个连接,如果没有,没有超过最大连接数的情况下,创建新的连接线程负责这个客户端。 真正的操作之前,还需要调用用户模块进行授权检查,来验证用户是否有权限。

    58120

    ASP.NET MVC+EF框架+EasyUI实现

    :SQL Server 2012   (4)代码管理:SVN   (5)用到的技术:ASP.NET MVC,EF框架,Jquery EasyUI,Log4Net,VSS,微软T4模版   (6)数据库脚本本项目的...电子商务等信息系统中,任何一个操作都要进行权限的校验,如果有访问的权限则让用户继续访问,如果没有则终止这条请求,一句话,权限就是为了分类明确,安全性考虑。   ...3.创建权限的业务模型   (1) 使用EF框架的EDMX设计器来设计数据库的实现。   ...(2)注意事项:        1)使用ModelFirst的方式来设计数据库的完成        2)主键如果使用Guid类型则必须去掉自动增长        3)实体所有的属性必须设置备注        ...4.下面演示项目的功能   (1) 首先使用用户名密码都是admin登录,这是代码中做得一个没有验证权限的管理,也就是当你使用此用户名密码登录进去的话所有的权限都是可以访问的。

    2.1K50

    猴子都能懂的数据库避坑指南

    ,这么在意空间利用是不是有点矫枉过正?...对于这种观点其实我想反驳一下,这是典型的新手思维,你只在看到单个字段上的空间节省,但是没有考虑过数据也是持续增长,糟糕设计越到后期增长成本会越高(这里就类似于 Java 的经典面试题,集合类 ArrayList...,还会具体说一下糟糕设计对于性能会有多大的影响,这对企业来说就是边际成本的递增,从技术和架构上来说就会让你的系统不具备可扩展性 ?...字段类型的注意事项 因为不了解数据库的基本原理,所以很多初级程序员选择数据库字段类型的时候比较迷茫,主要还是没有明确指导原则,工作中我见过只有十几条数据的基础信息表中使用 long(8字节)作为 id...简单的基本原则如下:(后面会具体讲原因) 优先数字型字段(比如尽量使用 int 作为数据库主键 id 的类型而不是 varchar) 满足需求的前提下,字段类型尽量足够的小(例如 age 字段应该考虑使用

    26930

    MySQL数据库学习

    add constraint 外键名称 foreign key (外键列名称) references 主表名称(主表列名称) on update cascade on delete cascade; 数据库设计...中间表至少包含两个字段,这两个字段作为第三张表的外键,分别指向两张表的主键 数据库范式 设计数据库时,需要遵循的一些规范。...) DBA: 数据库管理员 用户管理 添加用户 CREATE USER '用户名'@'主机名' IDENTIFIED BY '密码'; 删除用户 DROP USER '用户名'@'主机名'; 修改用户密码...查询用户 切换到mysql数据库 USE myql; 查询user表 SELECT * FROM USER; 通配符:% 表示可以在任意主机使用用户登录数据库 权限管理 查询权限 SHOW GRANTS...FOR '用户名'@'主机名'; 授予权限 grant 权限列表(all) on 数据库名(*).表名(* ) to '用户名'@'主机名'; 撤销权限 revoke 权限列表 on 数据库名.表名

    4.2K20
    领券