1

我想设计一些允许用户将列表放在一起的东西,比如杂货。如果每个用户可以有多个列表(即不是固定数量)并且这些列表上都有可变数量的项目(同样,未设置),而有些项目出现在几个不同的列表中,我如何创建一个数据库而不是可怕多余的?

我对这种问题完全陌生,以前没有组装任何复杂的数据库,也不知道从哪里开始。这是我想出的一个例子,但我怀疑这是正确的做事方式:

在此处输入图像描述

任何帮助或想法将不胜感激!

4

2 回答 2

0

您可以join table LIST_LINK_ITEM在三个表之间创建

她的主键是:三个主键的组合

于 2012-09-11T17:44:16.690 回答
0

看起来你需要类似的东西:

在此处输入图像描述

列表对用户是私有的,但一个项目可以在多个列表之间共享:

  • USER 和 LIST 之间的关系是一对多的,通过一个简单的外键建模。
  • LIST 和 ITEM 之间的关系是多对多的,由它们之间的连接(又名链接)表建模:LIST_ITEM。

我在上图中使用了识别 USER 和 LIST 之间的关系,在“下游”表中生成了更多“自然”键:

  • 减少对 JOIN 的需求(您已经知道给定 LIST_ITEM 属于哪个 USER,而无需使用 LIST 进行 JOIN)。
  • 但是使下游键“更胖”。

使用 USER 和 LIST 之间的非识别关系(产生“更苗条”的键)的设计如下所示:

在此处输入图像描述

于 2012-09-11T19:38:45.147 回答