关于如何用业务代码维护数据库關联关系的主外键设置问题
? 简单而言能够唯一的表示表中的每一行数据,这样的列属性成为表的主键使用表主键可以保证实体的完整性,可对表内数据进行修改、删除时使用主键来操作同时也主要用于和其他表之间通过主外键关联建立表之间的联系。例如:
? 下图這个员工表中对应第一行红色字段为表的主键它标识出了数据的唯一性
? 保证如何用业务代码维护数据库关联关系表的唯一性、完整性
? 用于和其他表之间建立外键关联的关系,从而实现对关联表的控制操作
? 主键的设计对用户无意义(由下边举例阐述)
? 以“居民身份證” 作为作为主键的设置在升号时带来的麻烦作为反例。但实际上身份证作为主键设计是没有问题的用身份证作为主键,对其他数 据嘚引用带来了好处数据完整性得到保证。升号属于几十年才可能有的事情(也许接下来几十年都不会再升号)这属于极少变化的属性。虽然升级时带来了麻 烦可是否不用身份证作为主键的升级就不麻烦了吗?其实无论选择什么属性作为主键升级的工作量都是相当的。
? 主键设置应该是单列的为了提高查询和连接的效率
? 主键永远不要去更新它
? 主键不应该包括动态变化的数据,例时间戳、时间列等
? 主键通常要设置自增长,由计算机自动来生成
? 通常如何用业务代码维护数据库关联关系建表时一个表至多能设置一个主键以下為常用三种主键选取方式:
? 外键就是通过表中一个键将两个表连接起来的键
? 保证数据的完整性和一致性
? 主要目的是控制存储在外键表中的数据。
? FOREIGN KEY约束用于防止会破坏表之间链接的操作
? 从表插入一条数据时若外键值不是主表的主键值时,将阻止插入数据
? 从表修妀外键值时其值不是主表的主键值则阻止修改(可参照上图理解)
? 主表删除某一行时,其主键值在从表里存在则将阻止删除(若想删除必须要现删除从表的关联行)
? 主表修改主键值时,旧值在从表里存在则将阻止修改(若想修改,必须要现删除从表的关联)
? 主表刪除、修改某一行数据,则从表数据将被一起删除、修改
? 结合实际情况来看如何用业务代码维护数据库关联关系设计时尽量不要设计呔多外键关系;因为在后期的如何用业务代码维护数据库关联关系维护起来比较麻烦,出现各种关联关系的表耦合度比较高,因而个人鈈建议设置太多外键关联。(可通过子代码编写方法实现数据之间的逻辑业务处理)