我有几个许多人在我的模型很多关系由一个客户端,订阅,一个疗程:如何实现多对多关系?
- 一个客户零个或多个订阅
- 订阅允许客户端访问一个或多个 课程
我已经有三张表列出所有的客户,订阅计划和课程。实现多对多关系而不必复制大量数据的最佳方法是什么?
我有几个许多人在我的模型很多关系由一个客户端,订阅,一个疗程:如何实现多对多关系?
我已经有三张表列出所有的客户,订阅计划和课程。实现多对多关系而不必复制大量数据的最佳方法是什么?
使用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)
说明:每个订阅是specificially为一个客户机,所以有1:n的这两个之间的关系。但同一课程可以通过不同的订阅不同的客户预订不止一次,因此课程和订阅之间存在n:m的关系,这通过链接表Subscription_Course
解决。
如果您希望在Subscription_Course
的(SubscriptionID, CourseID)
上设置唯一的密钥约束,您可以在该模型上添加其他约束。
一个表的ClientID,subscriptionId与另一个表subscriptionId和courseId
常见的方法来存储许多一对多两个表之间是把两个表项第3表格这样
注意:
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);