首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何实现多到多的关系?

如何实现多到多的关系?
EN

Stack Overflow用户
提问于 2011-03-10 12:44:04
回答 4查看 5.3K关注 0票数 4

在我的模型中,我有几个到多个关系,包括一个客户、一个订阅、一个课程:

  1. 客户端有零或多个订阅
  2. 订阅允许客户端访问一个或多个课程

我已经有三个表列出了所有的客户,订阅计划和课程。在不重复大量数据的情况下,实现多到多关系的最佳方法是什么?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-03-10 12:49:20

使用4张表格:

代码语言:javascript
复制
Client  (PK: ClientID)
Subscription (PK: SubscriptionID, FK: ClientID)
Course (PK: CourseID)
Subscription_Course (PK: Subscription_Course, FK: SubscriptionID, CourseID)

PK=Primary键,FK=Foreign键。

以下是两国关系:

代码语言:javascript
复制
Client -> Subscription (1:n)
Subscription -> Subscription_Course (1:n)
Course -> Subscription_Course (1:n)

说明:每个订阅都是针对一个客户端的,因此这两个客户端之间存在1:n关系。但同一课程可以由不同的客户通过不同的订阅多次预订,因此在课程和订阅之间存在n:m关系,由链接表Subscription_Course解决。

如果需要,可以在该模型上添加其他约束,例如,在(SubscriptionID, CourseID)Subscription_Course中添加一个唯一的键约束。

票数 5
EN

Stack Overflow用户

发布于 2011-03-10 13:34:08

Note

ClientSubscriptionNo是每个客户端的订阅号(1,2,3.);当为客户端创建新订阅时,可以使用

代码语言:javascript
复制
select coalesce(max(ClientSubscriptionNo), 0) + 1
from Subscription
where ClientID = the_client_id

你可以决定也可以不决定:

代码语言:javascript
复制
alter table SubscriptionItem
  add constraint uq1_SubscriptionItem unique (ClientID, CourseID);
票数 4
EN

Stack Overflow用户

发布于 2011-03-10 12:49:05

一个表带有clientId,subscriptionId,另一个表有subscriptionId和courseId

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5259736

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档