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)
我对第二个选项很感兴趣,因为它将阻止我创建额外的关系表。我应该考虑任何陷阱或其他问题吗?
我应该考虑任何陷阱或其他问题吗?
您的要求之一是“每行在任何时候都只能使用 2 个字段”。在 MySQL 中,没有简单的方法来强制执行此约束,因此可能会导致数据不一致。
如果使用多表设计,可以使用非NULL字段和外键约束来保证一致性。