使用单个主键或使用复合主键(通常是一个主键和外键的组合)是否更好?我有以下示例:
复合主键示例:
AMTA BMeta
--- BMetaId - 主键
--- AMetaID - 表AMeta的外键
--- BMetaText
A
--- AId - 主键
--- AMetaId - 表AMeta的主键和外键
--- AText
B
--- BId - 主键
--- BMetaId - 表BMeta的主键外键
--- AId - 表A的主键和外键
--- BText
单个主键示例:
BMeta
--- BMetaId - 主键
--- AMetaId - 表AMeta的外键
--- BMetaText
一个
--- AId - 主键
--- AMetaId - 表AMeta的外键
--- AText
乙
--- BId - 主键
--- BMetaId - 表BMeta的外键
--- AId - 表A的外键
--- BText
哪种数据库设计更好?
答案 0 :(得分:3)
我几乎完全倾向于使用单列主键 - 要么有一个好的自然键可用(很少),要么我在表中添加一个代理INT IDENTITY键。
我的主要原因是:
答案 1 :(得分:2)
第一种方案毫无意义,因为它暗示(并允许)表B中有多个行具有相同的BId值但具有不同的AId值,并且没有与列Bid相关的含义。这是其他地方的FK吗?如果是这样,到底是什么?如果没有,那是什么产生的?这是什么意思?
另一方面,第二种方案在逻辑上是一致的,但暗示表B中的行可以与表AMeta中的两个不同行相关联,
这真的是您商业领域模型的准确表示吗?