`
lg_asus
  • 浏览: 185818 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

设计表时要考虑主键的设置

 
阅读更多
今天一同事问我怎么改db中user表的编号,系统中user表是建模生成的,编号设置成不可更改的,user表中主键是一个随机生成的ouid,一般公司为员工的中文拼音来作为编号。现在一客户要改user表中用户的编号(因为中文拼音可能重复,他们想改用号码作为员工编号),由于前台不能改,因此我想从db中直接改,为了不改错数据,我查了一些别的和user相关的表,发现有的表里引用的竟然是user的编号,并不是ouid,这样就有非常严重的问题了,我只改user表里内容的话,那别的表中数据就失效了。这里的严重错误是,别的表引用user应该用user表中的ouid,而不user表中的编号,ouid字段一经建立就不能改动。

上面的错误并不值得一提,但想到我以前做的一个选型系统,生成选型单号,单号以当前时间编码,精确到ms+3位随机数字,因此重复的概率几乎为0,我当时就想,如果我把单号作为主键就可以了,没必要再用系统生成的32位随机字符作为主键,用单号作为主键还有一个好处,就是单号是有时间规律的,我在查询选型单相关表的数据时,人眼可以一眼分辨出单号,而不会对一串32位字符发晕,但是如果要改单号的话,那就会引发一系列问题(当然,这个如果几乎没有存在的一天)。

因此,以后在设计表的时候,尽量不要让在UI上显示的字段来做为主键,如上面说到的用户编号和选型单号,虽然它们改的几率几乎为0,但是万一要改,牵一发而动全身,我建议是每个表用随机生成的字符作为主键,别的表引用时以这串字符作为外键,虽说感觉上数据有点冗余,但谁能保证客户哪天冒出这个需求呢。
分享到:
评论

相关推荐

    sqlserver主键设计的注意点

    常常有人称呼主键为内部标识,为什么会这样称呼,原因之一在于“内部”,所谓内部从某种程度上来说就是指表记录,从大的范围来说就是数据库,如果你在设计的时候选择了对用户来说有意义的信息来作为主键,那么迟早会...

    一个博客系统数据库表设计.doc

    在设计一个博客系统的数据库时,需要考虑到多个表的设计,包括用户表、博客表、用户类型表、博友表、图片表、用户相册表、图片评论表和文章表。每个表都有其自己的主键、外键和字段设计。 用户表 用户表(WebUser)...

    要在数据库中创建一个表要先定义表中的字段名.doc

    "数据库表的创建和设计" 在数据库中,创建一个表之前,需要先定义表中的字段名,这是因为表的结构决定了表中的数据类型和组织方式。...只有当我们合理地设计表的结构时,才能确保数据库的正确性和效率。

    如何设计数据库表.doc

    设计表之后,常常会由于没有考虑时间的影响而导致以后出现严重问题。许多表设 计在当时使用时效果非常好,但是,常常会因为用户修改数据、添加数据以及随时间的 推移而崩溃。开发人员经常会发现需要重新设计表的...

    数据库函数依赖关系模式范式候选键主键码PPT学习教案.pptx

    例如,在一个电商平台中,商品信息表的设计需要考虑函数依赖关系、候选键、主键码和范式,以确保数据库的性能和可扩展性。 数据库函数依赖关系模式范式候选键主键码PPT学习教案是数据库设计中一个非常重要的概念,...

    mysql知识点.docx

    在设计表时,需要注意以下几点: * 使用正确的数据类型:不同的数据类型占用不同的存储空间,选择合适的数据类型可以节省存储空间。例如,使用 tinyint 或 char 型来存储少量的取值。 * 设置主键:大部分表都使用 ...

    数据库表结构设计.doc

    具体做法是:在概 念数据模型设计时遵守第三范式,降低范式标准的工作放到物理数据模型设计时考虑。 降低范式就是增加字段,允许冗余。 6. 要善于识别与正确处理多对多的关系 若两个实体之间存在多对多的关系,则应...

    BBS论坛数据库设计代码.pdf

    在 `bbsUsers` 表中,添加了一个主键约束 `PK_UID`,将用户编号字段设置为主键。使用 `alter table bbsUsers add constraint PK_UID primary key(UID)` 语句来添加主键约束。 此外,还添加了一个检查约束 `CK_...

    苏州大学数据库课程设计.docx

    * 数据库表设计:教务管理系统的数据库表设计需要考虑到数据的 normalization、denormalization、indexing等方面。 * 数据模型:教务管理系统的数据模型需要考虑到实体之间的关系,使用数据模型来描述实体之间的关系...

    数据库物理设计.pdf

    (Innodb会⽣成6个字节的隐含主键) 2、根据数据库的类型,考虑主键是否需要顺序增长。 3、主键的字段类型所占空间要尽可能⼩。 避免使⽤外键约束: 1、降低数据导⼊的效率 2、增加维护成本 3、虽然不建议使⽤外键...

    MySQL 8.0 实战教程从入门到项目实战.docx

    可扩展性:设计时考虑未来可能的功能扩展。 性能:优化查询性能,考虑索引和查询设计。 3. 实体关系图 (ER Diagram) 创建ER图来表示不同实体之间的关系。 4. 数据库表设计 用户表 (Users) user_id (主键) ...

    PostgreSQL MySQL Oracle数据库设计优化完美攻略

    在选择主键时,我们需要注意选择最小的键组合作为主键,并且选择合适的字段次序。 4. 外键设计 外键是数据库对象中非常重要的一部分,它可以维护数据的一致性。我们需要谨慎地使用级联删除和级联更新,以免数据...

    3.2数据库的构建.pptx

    在设计数据表时,需要合理设置字段属性,例如定义主键的字段不允许输入重复的值或不输入值。 七、字段属性设计 字段属性设计是指设计数据表中的字段属性。字段属性包括数据类型、字段名称、字段长度等。设计字段...

    数据库设计规范.pdf

    特别对于使⽤GUI⼯具设计表结构时,要检查它⽣成的SQL定义 连接的客户端也使⽤utf8,建⽴连接时指定charset或SET NAMES UTF8;。 如果遇到EMOJ等表情符号的存储需求,可申请使⽤UTF8MB4字符集 2.3 所有表都要添加注释...

    如何设计数据库结构.pdf

    设计表之后,常常会由于没有考虑时间的影响⽽导致以后出现严重问题。许多表设计在当时使⽤时效果⾮常好,但是,常 常会因为⽤户修改数据、添加数据以及随时间的推移⽽崩溃。开发⼈员经常会发现需要重新设计表的结构...

    数据库技能大赛试题

    * 每个表的设计都考虑到了实际应用中的需求和约束条件,例如 Student 表中的 Sid 是主键,Sname 是非空的,Sage 的范围在 1-150 之间等。 * Score 表的设计中,SCid 是主键,Sid 和 Cid 是外键,分别指向 Student 表...

    政务平台数据库设计.doc

    表空间设计 遵照《数据库表空间命名规范》,数据库表空间设计如下: 表4-4表空间设计 "编号 "业务系统名称 "表空间名称 "总大小 " "1 "省级政务管理平台 "JSYZT "100G " 数据库用户设置 表4-5数据库用户设置 "用户 ...

    数据库设计技巧.doc

    具体做法是:在概 念数据模型设计时遵守第三范式,降低范式标准的工作放到物理数据模型设计时考虑。 降低范式就是增加字段,允许冗余。 6. 要善于识别与正确处理多对多的关系 若两个实体之间存在多对多的关系,则应...

    数据库设计原则.docx

    具体做法是:在概念数据模型设计时遵守第三范式,降低范式标准的工作放到物理数据模型设计时考虑。降低范式就是增加字段,允许冗余。 6. 要善于识别与正确处理多对多的关系 若两个实体之间存在多对多的关系,则应...

    软件数据库设计模板.docx

    物理结构设计 1、主要是设计表结构。一般地,实体对应于表,实体的属性对应于表的列,实体之间的关系成为表的约束。逻辑设计中的实体大部分可以转换成物理设计中的表,但是它们并不一定是一一对应的。 2、对表结构...

Global site tag (gtag.js) - Google Analytics