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

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

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

相关推荐

    常见(MySQL)面试题(含答案).docx

    事务隔离级别,每个级别会引发什么问题,MySQL默认是哪个级别? MySQL常见的存储引擎InnoDB、MyISAM的区别?【~】 数据库三范式,根据某个场景设计数据表?优缺点 MySQL 索引使用的注意事项 SQL怎么优化 数据库悲观...

    mysql数据库设计(1).pdf

    mysql数据库设计 数据库设计 约束 约束 * 概念: 对表中的数据进⾏限定,保证数据的正确性、有效性和完整性。 * 分类: 1. 主键约束:primary key 1. 注意: 1. 含义:⾮空且唯⼀ 2. ⼀张表只能有⼀个字段为主键 3. ...

    2017最新老男孩MySQL高级专业DBA实战课程全套【清晰不加密】,看完教程月入40万没毛病

    02-DBA参与项目数据库设计及培训开发人员高效设计MYSQL库语句.avi 03-老男孩核心思想-项目周期的制定思想.avi 04-linux进程占用cpu高的解决方案案例.avi 05-数据库账户权限控制多种思路及技巧.avi 06-数据库客户端...

    PHP+MySQL三层模式演示源码

    PHP三层标准版,PHP5.0以上,运用分层设计思想,分层情况:Model+BLL+IDAL+DAL+WebUI。...支持数据库:MYSQL (注意:表结构设计第一个主键必须是自动编号列) 压缩包里有项目源码和数据库建表SQL文件。欢迎测试。

    mysql面试题(涉及索引、事务、锁)

    MySQL 索引使用的注意事项 left join,right join,inner join 说说分库与分表设计 分库与分表带来的分布式困境与应对之策(如何解决分布式下的分库分表,全局表?) 说说 SQL 优化之道 MySQL遇到的死锁问题、如何...

    MySQL管理之道 性能调优、高可用与监控.part2.rar

    《mysql管理之道:性能调优、高可用与监控》由资深mysql专家撰写,以最新的mysql版本为基础,以构建高性能mysql服务器为核心,从故障诊断、表设计、sql优化、性能参数调优、mydumper逻辑、xtrabackup热备份与恢复、...

    mysql数据库的基本操作语法

    自动:当表上定义主键约束、唯一、外键约束时,该表会被系统自动添加上索引。 手动:手动在相关表或列上增加索引,提高查询速度。 删除索引方式: 自动:当表对象被删除时,该表上的索引自动被删除 手动:手动删除...

    mysql数据库高级,mysql优化.rar

    此外,还要注意在使用字符串类型(如VARCHAR)时,根据实际需求选择适当的字符集和校对规则,以确保正确的数据存储和查询。 使用最小化的数据类型:选择最小化的数据类型来存储数据,以减少存储空间的占用和提高...

    MySQL数据库管理+表格创建+表格结构+数据建模

    在学习数据库管理和SQL查询时,这个资源可以作为创建表格的参考材料,帮助学习者理解表格结构的设计和数据建模的重要性。 在面试准备过程中,这些SQL语句和注意事项可用作答案准备的一部分,以应对数据库管理和SQL...

    MySQL笔记-InnoDB物理及逻辑存储结构

    它是B+树,这里有一点要注意的,数据=索引; 叶子结点存放数据、主键、事务ID、回滚指针的。 二级索引最终都会指向主键索引。 在InnoDB引擎中,创建表没有主键,InnoDB会把not null中unique作为主键,若这样的列也...

    powerdesigner数据库设计.pdf

    powerdesigner数据库设计 数据库设计 (1)创建物理数据模型 ... 注意:创建表时必须带有主键,否则保存SQL不成功。 (3)导⼊外部SQL⽂件 mysql> source c:/test/crebas.sql; 此时mysql数据库中已经创建好了相应的表。

    【毕业设计】基于springboot的仿共享单车后台源码及笔记【源码+SQL脚本】.zip

    其他:logback,lombok,fastjson, 全局异常和高复用状态类封装、 利用mysql主键自增特性实现单车连续编号 学习这个项目的时候,对其思路做了笔记,我这里按照自己的写法,与其略有不同, 但是基本思路都是一样的...

    MySQL 性能优化的最佳20多条经验分享

    当我们去设计数据库表结构,对操作数据库时(尤其是查表时的SQL语句),我们都需要注意数据操作的性能。这里,我们不会讲过多的SQL语句的优化,而只是针对MySQL这一Web应用最多的数据库。希望下面的这些优化技巧对你...

    MySQL性能优化的最佳20+条经验

    当我们去设计数据库表结构,对操作数据库时(尤其是查表时的SQL语句),我们都需要注意数据操作的性能。这里,我们不会讲过多的SQL语句的优化,而只是针对MySQL这一Web应用最多的数据库。希望下面的这些优化技巧对你...

    基于Python入侵检测,取证window日志系统,框架 html + css + jquery + python 3.9

    取证规则 (crud,常用注意取证事件id配置格式: 104,Microsoft-Windows-Eventlog,正常情况下是不可能被清除的,除非是攻击者为了清除痕迹。 4720,User Add/Change/Delete,正常用户一般不会修改或者天一个新的管理员...

    Navicat Premium 11.0.17简体中文注册版.rar

    注意:破解时可能需要断开网络。Navicat Premium 11.0.17是一款支持多重数据库的管理工具,通过它可以让你使用本程序同时连接到多种类型格式数据库,支持SQL Server、MySQL、Oracle、SQLite等数据库,可以让不同...

    asp.net知识库

    在.NET访问MySql数据库时的几点经验! 自动代码生成器 关于能自定义格式的、支持多语言的、支持多数据库的代码生成器的想法 发布Oracle存储过程包c#代码生成工具(CodeRobot) New Folder XCodeFactory3.0完全攻略--...

    极简智能的AndroidOrm框架MiniOrm-For-Android.zip

    纯java结构设计,通过接口的设计,将上层业务和实际操作数据库的部分进行分离,开发者可以在此基础上自行实现mysql等数据的支持。下面是java部分核心设计 接入类库: 在项目的程序目录build.gradle中加入 ...

    超市管理系统

    项目框架设计: myeclipse+mysql+java web(servlet|jsp) 3.开发模式: MVC开发模式 注意: (1)创建项目与数据库时,采用UTF-8的编码. EncodingFilter (2)项目搭建 smbms src source folder ...

    face-embryo:Embryo 是一个为 Face ORM 生成模型的 CLI 程序

    它只需要一个精心设计的 mysql 模式(外键、主键……)。 安装 您可以在下载胚胎。 $ wget http://laemons.github.io/face-embryo/build/embryo-0.1.2.phar 然后建议使其在系统上可执行: $ sudo mv embryo-...

Global site tag (gtag.js) - Google Analytics