一张表中定义多个多对多关系

jd1*_*182 6 mysql database database-design

我需要在数据库中创建多个多对多关系。

有一个“主”表,我们称之为“项目”。

然后有 3 个包含“选项”的表。

假设我们有:类别、区域和用户。这些保存的唯一信息是项目的名称和 ID。

可以将多个类别、区域和用户分配给多个项目。

所以我有两种选择来建立这种关系:

1) 为每个“选项”表创建一个关系表。每个表将包含两列:“project_id”和“category_id”、“region_id”或“user_id”。使用这种方法,我有 3 个关系表,每个表仅处理一对表之间的关系。例如:

****************************
* project_id * category_id *
****************************
* 1          * 3           *
*------------*-------------*
* 3          * 4           *
*------------*-------------*
Run Code Online (Sandbox Code Playgroud)

2)创建一个包含4列project_id、category_id、region_id和user_id的关系表。每行在任何时候都只有 2 个字段被使用。project_id,然后是相关项目的字段 ID。

**************************************************
* project_id * category_id * user_id * region_id *
**************************************************
* 1          * 3           *         *           *
*------------*-------------*---------*-----------*
* 3          * 4           *         *           *
*------------*-------------*---------*-----------*
* 3          *             * 2       *           *
*------------*-------------*---------*-----------*
* 4          *             *         * 3         *
*------------*-------------*---------*-----------*
Run Code Online (Sandbox Code Playgroud)

我对第二个选项很感兴趣,因为它将阻止我创建额外的关系表。我应该考虑任何陷阱或其他问题吗?

Mar*_*ers 5

我应该考虑任何陷阱或其他问题吗?

您的要求之一是“每行在任何时候都只能使用 2 个字段”。在 MySQL 中,没有简单的方法来强制执行此约束,因此可能会导致数据不一致。

如果使用多表设计,可以使用非NULL字段和外键约束来保证一致性。