在两个实体之间使用多个 M2M 关系是个好主意吗?
Is it a good idea to use multiple M2M relationships between two entities?
我们遇到这样一种情况,我们似乎需要在数据库中的两个实体之间使用两种不同的 M2M 关系。
实体是 Users
和 Studies
。用户可以注册 学习,但也可能有资格 学习。
因此,我们正在考虑使用两个不同的 table 对其进行建模:Enrollments
和 Eligibilities
。
架构如下:
Studies
:
study_id
PK
User
user_id
PK
Enrollments
:
enrollment_id
公关
user_id
FK
study_id
FK
Eligibilities
eligibility_id
PK
user_id
FK
study_id
FK
我的问题是:这是个好主意吗? 我知道当建议将两个实体合并为一个时,这会在两个实体之间创建两个 M2M 关系。将这些关系组合成一个 table 的问题是这些关系是独立的。例如,用户可能有资格参加研究但不注册,用户可能注册研究但不符合条件。
是的,完全没问题;只注意按键。
I know that this would create two M2M relationships between two entities when it is advised to combine them into one.
不,不建议这样做。只关注逻辑、谓词和约束,而不是行话 (m2m ...)。
-- User USR exists.
--
user {USR}
PK {USR}
-- Study STY exists.
--
study {STY}
PK {STY}
-- User USR is eligible for study STY.
--
eligibility {USR, STY}
PK {USR, STY}
FK1 {USR} REFERENCES user {USR}
FK2 {STY} REFERENCES study {STY}
如果用户注册了一项研究,则该用户必须符合该研究的条件。
-- User USR enrolled in study STY.
--
enrollment {USR, STY}
PK {USR, STY}
FK {USR, STY} REFERENCES eligibility {USR, STY}
注:
All attributes (columns) NOT NULL
PK = Primary Key
FK = Foreign Key
我们遇到这样一种情况,我们似乎需要在数据库中的两个实体之间使用两种不同的 M2M 关系。
实体是 Users
和 Studies
。用户可以注册 学习,但也可能有资格 学习。
因此,我们正在考虑使用两个不同的 table 对其进行建模:Enrollments
和 Eligibilities
。
架构如下:
Studies
:study_id
PK
User
user_id
PK
Enrollments
:enrollment_id
公关user_id
FKstudy_id
FK
Eligibilities
eligibility_id
PKuser_id
FKstudy_id
FK
我的问题是:这是个好主意吗? 我知道当建议将两个实体合并为一个时,这会在两个实体之间创建两个 M2M 关系。将这些关系组合成一个 table 的问题是这些关系是独立的。例如,用户可能有资格参加研究但不注册,用户可能注册研究但不符合条件。
是的,完全没问题;只注意按键。
I know that this would create two M2M relationships between two entities when it is advised to combine them into one.
不,不建议这样做。只关注逻辑、谓词和约束,而不是行话 (m2m ...)。
-- User USR exists.
--
user {USR}
PK {USR}
-- Study STY exists.
--
study {STY}
PK {STY}
-- User USR is eligible for study STY.
--
eligibility {USR, STY}
PK {USR, STY}
FK1 {USR} REFERENCES user {USR}
FK2 {STY} REFERENCES study {STY}
如果用户注册了一项研究,则该用户必须符合该研究的条件。
-- User USR enrolled in study STY.
--
enrollment {USR, STY}
PK {USR, STY}
FK {USR, STY} REFERENCES eligibility {USR, STY}
注:
All attributes (columns) NOT NULL
PK = Primary Key
FK = Foreign Key