`
hejiajunsh
  • 浏览: 409008 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

MySQL主键设计时应注意的问题

阅读更多
学习MySQL数据库,MySQL主键是不能不提到的,下面就对MySQL主键的设计原则进行说明,希望能让您对MySQL主键有更深的认识。
关系数据库依赖于主键---它是数据库物理模式的基石。主键在物理层面上只有两个用途:
1. 惟一地标识一行。
2. 作为一个可以被外键有效引用的对象。
基于以上这两个用途,下面给出了我在设计物理层面的主键时所遵循的一些原则:
1. MySQL主键应当是对用户没有意义的。如果用户看到了一个表示多对多关系的连接表中的数据,并抱怨它没有什么用处,那就证明它的主键设计地很好。
2. MySQL主键应该是单列的,以便提高连接和筛选操作的效率。
注:使用复合键的人通常有两个理由为自己开脱,而这两个理由都是错误的。其一是主键应当具有实际意义,然而,让主键具有意义只不过是给人为地破坏数据库提 供了方便。其二是利用这种方法可以在描述多对多关系的连接表中使用两个外部键来作为主键,我也反对这种做法,理由是:复合主键常常导致不良的外键,即当连 接表成为另一个从表的主表,而依据上面的第二种方法成为这个表主键的一部分,然,这个表又有可能再成为其它从表的主表,其主键又有可能成了其它从表主键的 一部分,如此传递下去,越靠后的从表,其主键将会包含越多的列了。
3. 永远也不要更新MySQL主键。实际上,因为主键除了惟一地标识一行之外,再没有其他的用途了,所以也就没有理由去对它更新。如果主键需要更新,则说明主键应对用户无意义的原则被违反了。
注:这项原则对于那些经常需要在数据转换或多数据库合并时进行数据整理的数据并不适用。
4. MySQL主键不应包含动态变化的数据,如时间戳、创建时间列、修改时间列等。
5. MySQL主键应当有计算机自动生成。如果由人来对主键的创建进行干预,就会使它带有除了惟一标识一行以外的意义。一旦越过这个界限,就可能产生认为修改主键的动机,这样,这种系统用来链接记录行、管理记录行的关键手段就会落入不了解数据库设计的人的手中。
分享到:
评论

相关推荐

    MySQL数据库主键重复原因分析及处理.pdf

    MySQL数据库主键重复原因分析及处理.pdf MySQL数据库主键是数据库管理系统中的一种重要概念,它是指在关系型数据库中,每个表的唯一标识符,用于唯一地标识表中的每一...但是,主键重复的问题也需要引起注意和解决。

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

    ### 数据库主键设计原则详解 #### 一、引言 在数据库设计中,主键的设计至关重要,它不仅关系到数据的唯一性,还影响着数据检索效率以及系统的整体性能。本文将根据提供的描述和部分内文,深入探讨数据库主键设计...

    mysql实现char类型主键自增长

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

    mysql雪花算法生成唯一整型ID主键的实现方法

    MySQL 雪花算法生成唯一整型ID主键的实现主要针对...但需要注意的是,这种方法在高并发场景下可能会面临锁竞争问题,因此在实际应用中需要根据业务需求进行优化,如增加序列步长(increment)或采用其他并发控制策略。

    MySQL AUTO_INCREMENT 主键

    - 在进行批量插入或并发插入操作时,应注意监控`AUTO_INCREMENT`字段的当前值,以避免出现冲突或遗漏的情况。 #### 6. 最佳实践 - 在使用`AUTO_INCREMENT`时,建议选择合适的整数类型,以满足预期的数据量需求。 -...

    Mysql面试题主键自增

    在MySQL数据库系统中,主键自增是一种常见的数据表设计策略,它对于数据...了解并掌握这些关于MySQL主键自增的知识,将有助于在面试中表现出对数据库设计和管理的深入理解,也能在实际工作中更有效地管理和维护数据表。

    mysql数据库设置外键应该注意的几点

    设置外键时,有几点需要注意,以确保数据库设计的规范性和高效性。以下是对这些关键点的详细阐述: 1. **外键约束定义**: 外键是用来建立两个表之间的关联,通常是主表(父表)的一个或多个字段与从表(子表)的...

    phpmysql网站设计

    此外,还需注意SQL注入的安全问题,通过预处理语句或参数化查询来防止恶意输入。 网站设计还包括前端界面的创建,通常使用HTML、CSS和JavaScript。HTML定义网页内容结构,CSS负责样式设计,JavaScript处理客户端...

    mysql_guid主键生成方式范例

    此外,如果你需要在数据库表设计时保持字段顺序,可以考虑使用`@Column(columnDefinition = "BINARY(16)")`来存储二进制形式的UUID,这样在插入和查询时可以避免字符排序的问题。 总的来说,通过Hibernate配置,...

    MYSQL数据库优化与表设计

    4. **主键设计**:建议不要使用自增属性字段作为主键与其他表进行关联。这种设计方式不利于系统的迁移和数据恢复。例如,在一个统计系统中,如果使用自增ID作为主键,可能会在数据迁移过程中出现问题。 5. **表设计...

    mysql问题,常见的mysql面试问题

    ### MySQL常见面试问题详解 #### 1. MySQL简介与特性 - **MySQL**:MySQL是一种关系型数据库管理系统(RDBMS),由瑞典MySQL AB公司开发,目前由Oracle公司维护。它以其高性能、高可靠性和易用性著称,在互联网行业...

    Mysql数据库设计标准

    MySQL数据库设计标准是确保数据一致性、可靠性和高效性的重要指南,它涵盖了多个方面,包括概念设计、逻辑设计和物理设计。以下是对这些关键知识点的详细解释: 1. **概念设计**: - 实体关系模型(ER模型):在...

    MySQL 数据库设计实践

    在设计数据库时,字段的设计至关重要,因为它直接影响着数据的存储效率和查询速度。 - **设计原则**: - 越小越好:较小的字段可以减少存储空间的使用,提高查询速度。 - 简单就好:避免使用过于复杂的字段类型。...

    数据库主键生成资料资源

    同时,主键设计还应考虑到未来可能的业务变更,以确保系统的灵活性和稳定性。 在进行数据库设计时,不仅要关注主键的生成,还要注意主键与其他字段的关系,比如避免使用外键作为主键,防止级联删除带来的风险;同时...

    MySQL数据库分表批量主键查询代理-mysql-partitions-proxy.zip

    MySQL数据库在处理大规模数据时,可能会遇到性能瓶颈,特别是在数据分片或分区后,进行主键查询时,问题更为突出。"MySQL数据库分表批量主键查询代理-mysql-partitions-proxy"项目就是为了应对这一挑战而设计的。这...

    从excel模版生成数据库表DDL,excel设计mysql,excel设计表格模板转成mysql表文件,

    然而,也需要注意数据类型和约束的兼容性问题,因为Excel的数据格式与MySQL的可能有所不同,需要在转换过程中进行适当的映射和验证。 此外,这种方法可能会忽略一些数据库设计的最佳实践,例如索引优化、范式理论的...

    MySQL 创建主键,外键和复合主键的语句

    请注意,添加复合主键时,所有参与的列都必须是非空的,并且其组合必须是唯一的。 **外键操作** 外键不仅可以用于限制数据插入,还可以实现级联操作,如级联删除和更新。在MySQL中,设置外键级联删除和更新的选项是...

    mysql非主键自增长用法实例分析

    在MySQL数据库中,自增长(Auto_INCREMENT)特性通常用于创建序列化的标识字段,尤其是在需要唯一标识记录时。然而,这个特性并不局限于主键。在理解MySQL非主键自增长用法之前,首先需要明确主键和自增长的概念。 ...

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

    3. 主键设计 主键是数据库表的唯一标识符,它对查询的影响非常大。在选择主键时,我们需要注意选择最小的键组合作为主键,并且选择合适的字段次序。 4. 外键设计 外键是数据库对象中非常重要的一部分,它可以维护...

Global site tag (gtag.js) - Google Analytics