我的模型中有多个关系,包括客户端,订阅,课程:
我已经有三张表列出了所有客户,订阅计划和课程。在不必复制大量数据的情况下,实现多对多关系的最佳方法是什么?
答案 0 :(得分:4)
使用4个表:
Client (PK: ClientID)
Subscription (PK: SubscriptionID, FK: ClientID)
Course (PK: CourseID)
Subscription_Course (PK: Subscription_Course, FK: SubscriptionID, CourseID)
PK =主键,FK =外键。
以下是关系:
Client -> Subscription (1:n)
Subscription -> Subscription_Course (1:n)
Course -> Subscription_Course (1:n)
说明:每个订阅特定于一个客户端,因此这两个订阅者之间存在1:n的关系。但是不同的客户可以通过不同的订阅多次预订相同的课程,因此课程和订阅之间存在n:m关系,这可以通过链接表Subscription_Course
解决。
如果需要,您可以在该模型上添加其他约束,例如,在(SubscriptionID, CourseID)
的{{1}}上添加唯一键约束。
答案 1 :(得分:4)
注意强>:
ClientSubscriptionNo
是每个客户的订阅号(1,2,3 ..);使用
select coalesce(max(ClientSubscriptionNo), 0) + 1
from Subscription
where ClientID = the_client_id
您可能会或可能不会决定:
alter table SubscriptionItem
add constraint uq1_SubscriptionItem unique (ClientID, CourseID);
答案 2 :(得分:1)
一个表 clientId , subscriptionId ,另一个表 subscriptionId 和 courseId
答案 3 :(得分:1)
在两个表之间存储多对多的常用方法是将两个表中的键放到第三个表中