4

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

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

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

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

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

所以我有两个选择来创建这种关系:

1)为每个“选项”表创建一个关系表。每个表将包含两列:“project_id”和 category_id、region_id 或 user_id。使用这种方法,我将有 3 个关系表,每个表只处理一对表之间的关系。例如:

****************************
* 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         *
*------------*-------------*---------*-----------*

我对第二个选项很感兴趣,因为它会阻止我需要创建额外的关系表。我应该考虑任何陷阱或其他问题吗?

4

1 回答 1

3

我应该考虑任何陷阱或其他问题吗?

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

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

于 2012-11-29T11:23:39.023 回答