我需要在我的数据库中创建多个多对多的关系。
有一个'主'表,我们称之为'项目'。
然后有3个表包含'选项'。
假设我们有:类别,地区和用户。这些持有的唯一信息是项目的名称和ID。
可以为多个项目分配多个类别,区域和用户。
所以我有两个选择来创建这种关系:
1)为每个“选项”表创建一个关系表。每个表都包含两列:'project_id'和category_id,region_id或user_id。使用这种方法,我有3个关系表,每个表只处理一对表之间的关系。 E.g:
****************************
* project_id * category_id *
****************************
* 1 * 3 *
*------------*-------------*
* 3 * 4 *
*------------*-------------*
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 *
*------------*-------------*---------*-----------*
我受第二个选项的诱惑,因为它会阻止我创建额外的关系表。我应该考虑是否有任何陷阱或其他问题?
答案 0 :(得分:2)
我应该考虑是否存在任何陷阱或其他问题?
您的一个要求是“每行只能随时使用2个字段。”在MySQL中,没有简单的方法来强制执行此约束,因此可能会导致数据不一致。
如果使用多表设计,则可以使用非NULL字段和外键约束来确保一致性。