2010-12-20 80 views
0

这是一个基本的数据库设计问题。我想要一个定义客户之间关系的表格(或多个表格)。我想要它,所以PrimaryCustomer可以链接到多个SecondaryCustomers,并且可以有许多具有相同关系的SecondaryCustomer。数据库设计 - 定义基本的多对一关系

PrimaryCustomerID RelationshipID SecondaryCustomerID 

1)如果主键是{PrimaryCustomerID}那么我只能有什么样的一个链接的客户。

2)如果主键是{PrimaryCustomerID, RelationshipID},那么每个关系类型只能有一个链接的客户。 3)如果主键是{PrimaryCustomerID, RelationshipID, SecondaryCustomerID},那么我可以拥有任何我喜欢的东西,但将所有列作为主键似乎是完全错误的。

什么是设置的正确方法?

回答

0

3号数字模型是正确的选择。链接表通常包含连接中的所有列,因为它们所做的只是链接到其他表。

0

如果客户只能链接到一个主要客户,那么您可以在客户表本身中使用简单的递归关系。

  • CustomerID作为PK
  • PrimaryCustomerID为FK为CustomerId
0

没有错,否3.

alt text

如果需要防止反向关系副本,则可以使用

ALTER TABLE CustomerRelationship 
ADD CONSTRAINT chk_id CHECK (PrimaryCustomerId < SecondaryCustomerId); 
1

第三个替代方案可能是(PrimaryCustomerId,SecondaryCustomerId),如果每对客户只允许一种类型的关系,这将是有意义的。要实现哪些键应该由您需要在表中表示哪些依赖关系来定义,以便表格准确地表示您正在建模的实际情况。原则上使用复合键或全键表格没有任何问题。

+0

>原则上,复合键或全部关键表没有任何问题。好,谢谢。 – ColdAndTired 2010-12-21 12:11:16