在没有连接表的情况下完全交叉多对多

时间:2015-05-20 20:31:51

标签: sql

我有3个表代表非通用的多对多连接:

包:package_id

项目:item_id,package_id

用户:user_id,package_id

因此,我将用户连接到项目,即一个用户可以连接到多个项目,并且项目可以连接到多个用户。 这仅限于两个用户无法连接到具有部分交叉的多个项目的情况。我很好 - 我的情况自然受到限制。这里的包是一种连接表,用于管理具有自动增量属性的package_id。

我的任务中的典型选择 - 查找与给定用户关联的所有项目。并且可以完全不使用包表来进行选择。

因此,我可以完全从这个方案中删除Packages表。唯一要做的事情 - 为新项目组仔细选择package_id,这是相当可行的。

问题是:为什么这是一个坏主意?

1 个答案:

答案 0 :(得分:2)

  1. 您可以使用packages表来管理数据一致性。即如果您需要从不在您目录中的项目中找到package_id。
  2. 您可以使用packages表来检索有关package.name。
  3. 等软件包的其他信息
  4. 您可以使用packages表来查找items或users表中不存在的包。
  5. 如果您需要执行上面列出的操作,那么从您的方案中删除包表是个坏主意。