这是一个基本的数据库设计问题。我想要一个表(或多个表)来定义客户之间的关系。我想要它,所以PrimaryCustomer可以链接到多个SecondaryCustomer,并且可以有许多具有相同关系的SecondaryCustomer。
PrimaryCustomerID RelationshipID SecondaryCustomerID
1)如果主键是{PrimaryCustomerID}
,那么我只能拥有一个任何类型的链接客户。
2)如果主键是{PrimaryCustomerID, RelationshipID}
,那么每种关系类型只能有一个链接客户。
3)如果主键是{PrimaryCustomerID, RelationshipID, SecondaryCustomerID}
,那么我可以拥有我喜欢的任何内容,但将所有列作为主键似乎完全错误。
什么是正确的设置方法?
答案 0 :(得分:1)
第三种替代方案可能是密钥(PrimaryCustomerId,SecondaryCustomerId),如果每对客户只允许一种类型的关系,这将是有意义的。应该通过表中需要表示的依赖关系来定义要实现的键,以便表格准确地表示您正在建模的现实。复合键或全键表原则上没有任何问题。
答案 1 :(得分:0)
3号是这种数据模型的正确方法。链接表通常具有连接中的所有列,因为它们所做的只是链接到其他表。
答案 2 :(得分:0)
如果客户只能链接到一个主要客户,那么您可以在客户表本身中使用简单的递归关系。
答案 3 :(得分:0)
No 3没有错。
如果您需要防止反向关系重复,可以使用
ALTER TABLE CustomerRelationship
ADD CONSTRAINT chk_id CHECK (PrimaryCustomerId < SecondaryCustomerId);