Database 数据库设计-定义基本的多对一关系
这是一个基本的数据库设计问题。我需要一个表(或多个表)来定义客户之间的关系。我希望PrimaryCustomer可以链接到多个SecondaryCustomer,并且可以有多个具有相同关系的SecondaryCustomerDatabase 数据库设计-定义基本的多对一关系,database,database-design,normalization,Database,Database Design,Normalization,这是一个基本的数据库设计问题。我需要一个表(或多个表)来定义客户之间的关系。我希望PrimaryCustomer可以链接到多个SecondaryCustomer,并且可以有多个具有相同关系的SecondaryCustomer PrimaryCustomerID RelationshipID SecondaryCustomerID 1) 如果主键是{PrimaryCustomerID},那么我只能有一个任何类型的链接客户 2) 如果主键是{PrimaryCustomerID,Relation
PrimaryCustomerID RelationshipID SecondaryCustomerID
1) 如果主键是{PrimaryCustomerID}
,那么我只能有一个任何类型的链接客户
2) 如果主键是{PrimaryCustomerID,RelationshipID}
,则每个关系类型只能有一个链接的客户
3) 如果主键是{PrimaryCustomerID,RelationshipID,SecondaryCustomerID}
,那么我可以拥有我喜欢的任何东西,但是将所有列作为主键似乎是完全错误的
设置内容的正确方法是什么?第3种方法是此数据模型的正确方法。链接表通常具有一个连接中的所有列,因为它们所做的只是链接到其他表 如果一个客户只能链接到一个主客户,那么您可以在客户表本身中使用简单的递归关系
- 客户ID作为PK
- PrimaryCustomerID作为FK到CustomerID
- 三号车没什么问题
如果需要防止反向关系重复,可以使用
ALTER TABLE CustomerRelationship
ADD CONSTRAINT chk_id CHECK (PrimaryCustomerId < SecondaryCustomerId);
ALTER表客户关系
添加约束chk_id检查(PrimaryCustomerId
第三种选择可能是密钥(PrimaryCustomerId,SecondaryCustomerId),如果每对客户只允许一种类型的关系,这是有意义的。应该根据需要在表中表示的依赖项来定义要实现的键,以便表准确地表示您正在建模的现实。复合键或所有键表原则上没有问题。>复合键或所有键表原则上没有问题。好的,谢谢。