暂无图片
复合主键和复合外键的使用
我来答
分享
周群博
2019-07-30
复合主键和复合外键的使用

业务信息化程度不高,缺少针对表的单值主键。业务上有多个属性字段一起构成一行数据的唯一表示。这个时候应该另外创建一个编号用作主键,还是直接使用多个字段做复合主键呢?

1,使用编号就必须维护其业务上的唯一性,实际上也是吧那几个业务字段按照一定的规则拼起来。

2,使用复合主键就是会在创建关系表时,产生联合外键,好像提高了关系表的复杂度。

一般推荐哪一种呢?

我来答
添加附件
收藏
分享
问题补充
5条回答
默认
最新
Aaron.chen

业务主键与逻辑主键的争议其实一直都存在,个人认为项目中应该选择逻辑主键,这样能保持主键的独立性(不受业务规则的变化而影响),灵活性(可以自定义规则不受业务影响),

暂无图片 评论
暂无图片 有用 0
打赏 0
周群博

谢谢您的回复,那如果使用逻辑主键,有什么好用的编码方式吗?如果随意编码,我在其他表insert这个主键产生的外键时,键值就没法填了。

暂无图片 评论
暂无图片 有用 0
打赏 0
文成

逻辑主键要看业务是什么,一般信息化建设初期可以参考国标、部标、行业标准都有有编码的规范,尽量在开始设计的时候做好编码标准化

如果是自有业务,要看业务需求,是否需要连续,是否可以归零,是否有并发要求,是否需要体现层级,是否要体现业务要素(时间、业务编码)

一般建议数字,效率更高一些

暂无图片 评论
暂无图片 有用 0
打赏 0
lastwinner

一般这样,业务相关的多个字段,虽然唯一,但无法保证其永久不发生变化,所以,适合做唯一索引而不是主键索引。

对于主键,通常应采用序列或有一定编码规则的前缀/后缀,再加序列的方式组成。


暂无图片 评论
暂无图片 有用 0
打赏 0
周群博

单独编码的逻辑主键在本地表内是不会出现问题的。问题就是当这个主键被引用为外键时,另一个表就必须insert这个唯一键值。

比如我们常用的dept表和emp表,如果emp表的使用者不知道deptno,是无法在emp表插入数据的。这就是逻辑编码带来的问题。

暂无图片 评论
暂无图片 有用 0
打赏 0
回答交流
Markdown


请输入正文
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
暂无图片墨值悬赏