Mysql 在一个表中定义多个多对多关系

Mysql 在一个表中定义多个多对多关系,mysql,database,database-design,Mysql,Database,Database Design,我需要在数据库中创建多对多关系 有一个“主”表,我们称之为“项目” 然后有3个表包含“选项” 假设我们有:类别、区域和用户。它们保存的唯一信息是项目的名称和ID 可以将多个类别、区域和用户分配给多个项目 因此,我有两个选项来创建这种关系: 1) 为每个“选项”表创建一个关系表。每个表将包含两列:“project\u id”和category\u id、region\u id或user\u id。使用此方法,我将有3个关系表,每个表仅处理一对表之间的关系。例如: *****************

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

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

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

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

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

因此,我有两个选项来创建这种关系:

1) 为每个“选项”表创建一个关系表。每个表将包含两列:“project\u id”和category\u id、region\u id或user\u id。使用此方法,我将有3个关系表,每个表仅处理一对表之间的关系。例如:

****************************
* project_id * category_id *
****************************
* 1          * 3           *
*------------*-------------*
* 3          * 4           *
*------------*-------------*
2) 创建一个包含4列的关系表project\u id、category\u id、region\u id和user\u id。每行在任何时候都只能使用2个字段。项目id,然后是相关项字段的id

**************************************************
* project_id * category_id * user_id * region_id *
**************************************************
* 1          * 3           *         *           *
*------------*-------------*---------*-----------*
* 3          * 4           *         *           *
*------------*-------------*---------*-----------*
* 3          *             * 2       *           *
*------------*-------------*---------*-----------*
* 4          *             *         * 3         *
*------------*-------------*---------*-----------*
我对第二个选项很感兴趣,因为它将阻止我创建额外的关系表。是否有任何陷阱或额外的问题我应该考虑?< / P> <> P>是否存在任何陷阱或其他问题? 您的一个要求是“每行在任何时候都只能使用2个字段。”在MySQL中,没有简单的方法强制执行此约束,因此您可能会得到数据不一致性

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

此处有更详细的答案: