是使用单个主键更好,还是使用复合主键(通常,它们是一个主键和外键的组合)。我有以下示例:
复合主键示例:
AMeta
--- AMetaId - 主键
--- AMetaText
BMeta
--- BMetaId - 主键
--- AMetaID - 表 AMeta 的外键
--- BMetaText
一个
--- AId - 主键
--- AMetaId - 表 AMeta 的主键和外键
--- AText
B
--- BId - 主键
--- BMetaId - 表 BMeta 的主键外键
--- AId - 表 A 的主键和外键
--- BText
单个主键示例:
AMeta
--- AMetaId - 主键
--- AMetaText
BMeta
--- BMetaId - 主键
--- AMetaId - 表 AMeta 的外键
--- BMetaText
一个
--- AId - 主键
--- AMetaId - 表 AMeta 的外键
--- AText
B
--- BId - 主键
--- BMetaId - 表 BMeta 的外键
--- AId - 表 A 的外键
--- BText
哪种数据库设计更好?
最佳答案
我通常倾向于几乎完全使用单列主键 - 要么有一个好的自然键可用(很少),要么我向表中添加一个代理 INT IDENTITY 键。
我的主要原因是:
- 主键必须是唯一的,且始终不为空
- 默认情况下,主键是 SQL Server 中的集群键,它将稳定(不变)、窄(最多 4 字节)和最好不断增加的条件添加到标准列表中
- 使用单列主键,我的所有外键也很容易使用单列 - 我不喜欢仅仅为了使连接正常工作而必须连接 3、5 甚至更多列上的两个表,这是如果您有复合主键到底会发生什么
关于database - 复合主键或单主键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3877325/