我的模型中有几个多对多的关系,包括客户、订阅和课程:
- 一个客户可以有零个或多个订阅
- 一个订阅允许客户访问一个或多个课程
我已经有了三个表,分别列出所有客户、订阅计划和课程。有什么最佳方法可以实现多对多的关系,而不必重复大量数据?
我的模型中有几个多对多的关系,包括客户、订阅和课程:
我已经有了三个表,分别列出所有客户、订阅计划和课程。有什么最佳方法可以实现多对多的关系,而不必重复大量数据?
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)
Subscription_Course
来解决。Subscription_Course
中对(SubscriptionID, CourseID)
进行唯一键约束。注意:
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);
一个包含clientId和subscriptionId的表格,另一个表格包含subscriptionId和courseId
在两个表之间存储多对多关系的常见方法是将两个表的键放入第三个表中,如下所示