我需要在我的数据库中创建多个多对多关系。
有一个'Main‘表,我们称它为'projects’。
然后有3个包含“options”的表。
假设我们有:类别、区域和用户。它们保存的唯一信息是物品的名称和ID。
可以为多个项目分配多个类别、多个地域、多个用户。
因此,我有两个选项来创建这种关系:
1)为每个'option‘表创建一个关系表。每个表将包含两列:'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 *
*------------*-------------*---------*-----------*我被第二种选择所吸引,因为它将使我不再需要创建额外的关系表。是否有任何陷阱或额外的问题,我应该考虑?
发布于 2012-11-29 19:23:39
是否有我应该考虑的陷阱或其他问题?
您的需求之一是“每行在任何时候都只有2个字段在使用”。在MySQL中,没有简单的方法来强制执行此约束,因此可能会导致数据不一致。
如果使用多表设计,则可以使用非空字段和外键约束来确保一致性。
https://stackoverflow.com/questions/13624610
复制相似问题