Mysql 在一个表中定义多个多对多关系
我需要在数据库中创建多对多关系 有一个“主”表,我们称之为“项目” 然后有3个表包含“选项” 假设我们有:类别、区域和用户。它们保存的唯一信息是项目的名称和ID 可以将多个类别、区域和用户分配给多个项目 因此,我有两个选项来创建这种关系: 1) 为每个“选项”表创建一个关系表。每个表将包含两列:“project\u id”和category\u id、region\u id或user\u id。使用此方法,我将有3个关系表,每个表仅处理一对表之间的关系。例如: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个关系表,每个表仅处理一对表之间的关系。例如: *****************
****************************
* 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中,没有简单的方法强制执行此约束,因此您可能会得到数据不一致性
如果使用多表设计,则可以使用非空字段和外键约束来确保一致性。此处有更详细的答案: