首页 > 解决方案 > 在两个实体之间使用多个 M2M 关系是个好主意吗?

问题描述

我们有一种情况,我们似乎需要在数据库中的两个实体之间使用两种不同的 M2M 关系。

实体是UsersStudies。用户可以报名参加学习,但也可能有资格参加学习。

因此,我们正在考虑使用两个不同的表对此进行建模:EnrollmentsEligibilities.

架构看起来像:

我的问题是:这是个好主意吗?我知道当建议将它们合并为一个时,这会在两个实体之间创建两个 M2M 关系。将这些关系组合到一个表中时的问题是这些关系是独立的。例如,用户可能有资格参加一项研究但没有注册,而用户可能注册了一项研究但没有资格。

标签: sqldatabasedatabase-designm2m

解决方案


是的,完全可以;只注意键。

我知道当建议将它们合并为一个时,这会在两个实体之间创建两个 M2M 关系。

不,不建议这样做。只需关注逻辑、谓词和约束,而不是行话(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

推荐阅读