主键设计 自增长还是复合主键

jldzy 2015-01-12 11:12:54
现在有2张表
tba(vid int primary key,.....)
tbb(fid int,rid int, primary key(fid,rid),.....)

业务上要通过2张表,产生第三张表tbc(fid,rid,vid) 其中fid,rid,vid 三个字段可以确定唯一记录,是创建表
tbc(fid,rid,vid, primary key(fid,rid,vid))
还是
tbc(Id int primary,fid,rid,vid, unique key(fid,rid,vid))
?
...全文
173 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
jldzy 2015-01-12
  • 打赏
  • 举报
回复
还有一点 复合主键 可能影响插入速度, 现在有个疑惑,什么时候该用 复合主键,什么时候用 自增长主键 , 看到一篇介绍文章 如果是物理上的primary key,就不是避免了,而是应该坚决杜绝!!涉及业务相关的字段,绝对不允许作为物理primary key。其害处很多: 1、如果有频繁的业务修改,其相应主键字段有修改的可能。会导致非聚集索引中的主键信息相应修改(假如主键默认为聚集索引),而且容易造成表中记录的物理移动。 2、可能导致业务信息外泄。 3、生成有业务含义的字段需要按照一定的规则生成,不可避免使用varchar等字符串类型,影响插入和查询效率。 4、业务规则发生变化,造成的影响容易扩大。 如果楼主指的是逻辑主键,那么一般情况下是没有什么问题的。 当需求人员在概要设计和逻辑设计阶段,按照业务模型划分的各个表就应该首先符合3nf,在物理设计阶段,可能由DBA进行进一步的优化。回退到1nf和 2nf是非常普遍的事情。否则全是3nf和4nf的表的大系统,可以预期,其数据库服务器的CPU将很容易成为系统的性能瓶颈!
發糞塗牆 2015-01-12
  • 打赏
  • 举报
回复
复合主键一般需要满足:列类型够窄、自增,这两个要求的时候作为主键比较合适,否则建议优先使用自增序列
IFocusYou 2015-01-12
  • 打赏
  • 举报
回复
不建议用复合主键

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧