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

时间:2012-11-29 11:19:36

标签: mysql database database-design

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

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

然后有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         *
*------------*-------------*---------*-----------*

我受第二个选项的诱惑,因为它会阻止我创建额外的关系表。我应该考虑是否有任何陷阱或其他问题?

1 个答案:

答案 0 :(得分:2)

  

我应该考虑是否存在任何陷阱或其他问题?

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

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