`
lg_asus
  • 浏览: 191825 次
  • 性别: 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,但是万一要改,牵一发而动全身,我建议是每个表用随机生成的字符作为主键,别的表引用时以这串字符作为外键,虽说感觉上数据有点冗余,但谁能保证客户哪天冒出这个需求呢。
分享到:
评论

相关推荐

    数据库主键的五种设计方法

    数据库主键设计的五种方法 数据库主键设计是数据库设计中一个非常重要的环节,好的主键设计可以提高数据库的性能和可扩展性。...在选择主键设计方法时,我们需要考虑项目的实际情况和需求,选择最适合的方法。

    oracle表主键和外键的区别

    在设计数据库时,主键和外键的选择应考虑性能、数据的完整性和应用需求。选择适当的键类型和结构对于优化查询性能、简化数据管理和确保数据一致性至关重要。因此,主键和外键的设计是数据库设计中的关键环节,需要在...

    datagridview设置行的主键

    为了唯一标识每一条记录,在数据库设计中通常会为表定义一个或多个主键字段。在DataGridView中,虽然没有直接的“主键”概念,但我们可以通过设置某个列作为唯一标识符来达到类似的效果。这样做的好处是: - 在进行...

    数据库主键设计原则 设计数据库主健

    综上所述,在设计数据库主键时需要综合考虑多种因素,包括系统的规模、数据的特点、安全性的要求等。对于不同场景,可以选择不同的主键设计方案。例如,对于需要保证全球唯一性的分布式系统,可以考虑使用GUID;而...

    数据库主键生成资料资源

    在进行数据库设计时,不仅要关注主键的生成,还要注意主键与其他字段的关系,比如避免使用外键作为主键,防止级联删除带来的风险;同时,也要注意避免过度依赖主键,因为主键只是用来标识记录,不应当承载过多的业务...

    oracle创建表空间、表、主键、外键、序列

    在上面创建表时已经定义了主键。如果后来想添加主键,可以使用`ALTER TABLE`语句: ```sql ALTER TABLE 表名 ADD CONSTRAINT 主键约束名 PRIMARY KEY (列名); ``` 4. 外键: 外键用于在两个表之间建立关系,确保...

    深入探讨SQL_Server_表的主键问题

    在SQL Server中,主键是表设计中的核心概念,它用于唯一标识表中的每一行记录。主键的设计和选择对数据库的性能、可维护性和扩展性有着深远影响。本文主要探讨了在MS SQL Server中遇到的主键设计问题及其解决方案。 ...

    JPA中的联合主键

    当使用联合主键时,关联其他实体或执行查询时,需要确保正确处理主键的组合。在关联时,需要使用`@ManyToOne`、`@OneToOne`等注解,同时指定`@JoinColumn`,其中`name`属性应对应于联合主键的每个字段。在查询时,...

    主键和外键.doc

    ### 主键与外键详解 #### 一、主键与外键的概念 ...在选择主键时,需要综合考虑数据库的实际需求以及性能优化等因素。正确的主键设计不仅可以确保数据的完整性,还能极大地提高数据库系统的效率和稳定性。

    hibernate复合主键的实例

    在数据库设计中,主键是用于唯一标识表中每一行的字段或字段组合。当一个表的主键由两个或更多个字段组成时,我们称之为复合主键。复合主键确保了这些字段组合的唯一性,而单个字段可能不是唯一的。 二、为什么要...

    解决Sqlserver2008(sql2008)修改数据表数据类型或主键后,提示无法保存,失败的问题!.doc

    在SQL Server 2008 (包括R2版本)中,有时用户在尝试修改数据表的数据类型或主键设置后,会遇到一个错误提示,表明无法保存所做的更改,导致操作失败。这个问题通常与数据库设计者的一项默认设置有关,即“阻止保存...

    双主键表从复

    在修改主键时,需要评估这对查询性能的影响,并可能需要重新考虑索引策略。 8. **应用程序兼容性**:如果这个表被应用程序广泛使用,那么修改主键结构可能会导致应用程序代码需要相应的调整,以适应新的数据模型。 ...

    数据主键和外键的错误总结

    1. **缺少主键**:有些表设计时没有明确指定主键,这可能导致后续的数据管理和查询变得困难。例如,对于计算工件等类型的表格,如果缺乏有效的主键,则难以保证数据的唯一性。 - **解决方法**:根据表的具体用途...

    在powerdesigen中建立主外键关联表

    在“参照”部分,选择要关联的主表和主键。 步骤5:设置关联 在画布上,从外键实体拖一条线到主键实体,这将创建一个关联。双击关联线,打开关联属性窗口,可以设置关联的名称、基数(如一对一、一对多、多对多)、...

    mysql实现char类型主键自增长

    在MySQL数据库管理中,自增长主键是一种常见的设计模式,主要用于自动为每一行记录生成一个唯一的标识符。然而,这种自增长通常与整型数据类型(如INT)关联,而较少见于字符型数据(如CHAR)。本文将深入探讨如何在...

    主键自增功能设计文档1

    在设计主键自增功能时,我们需要考虑以下几个方面: 1. 基本流程及系统表设计:新增系统表 __all_auto_increment 记录每张表自增的主键当前最大值,每次插入新数据行时,互斥地读取出该值,并自增 1 做为新数据行的...

    持久化类主键生成策略+例子

    在Java的持久化框架中,如JPA(Java Persistence API)和Hibernate,主键生成策略是数据模型设计的重要部分。主键通常是表中唯一标识记录的一列或一组列,用于确保数据的完整性和唯一性。本篇文章将深入探讨JPA的4种...

    音乐播放主键参考

    提供的压缩包“音乐播放主键参考”可能包含示例代码、设计资源或教程,对进一步理解和实现这些功能非常有帮助。对于初学者来说,这是一个很好的学习起点,而对于经验丰富的开发者来说,这些资源可以作为快速实现类似...

    解决spring自增型主键问题

    在IT领域,特别是数据库设计与应用开发中,主键的设计与管理是确保数据完整性和高效检索的关键环节。本文将深入探讨如何在SQL Server 2008环境下解决自增型主键的问题,以及如何在Spring框架下进行有效的主键生成...

    hibernate的主键生成策略

    Hibernate 是一个流行的对象关系映射(ORM)框架,它允许开发者使用面向对象的方式来操作数据库。在Hibernate中,主键生成策略是确保实体类中的主键字段...在设计时,应充分考虑这些因素以确保主键的正确性和一致性。

Global site tag (gtag.js) - Google Analytics