如何实现多个多对多关系?

Maa*_*ten 4 database database-design many-to-many

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

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

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

Doc*_*own 5

使用4张表:

Client  (PK: ClientID)
Subscription (PK: SubscriptionID, FK: ClientID)
Course (PK: CourseID)
Subscription_Course (PK: Subscription_Course, FK: SubscriptionID, CourseID)
Run Code Online (Sandbox Code Playgroud)

PK=主键,FK=外键。

以下是关系:

Client -> Subscription (1:n)
Subscription -> Subscription_Course (1:n)
Course -> Subscription_Course (1:n)
Run Code Online (Sandbox Code Playgroud)

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

如果您愿意,您可以在该模型上添加其他约束,例如,在(SubscriptionID, CourseID)in上放置唯一键约束Subscription_Course