数据库设计是否包含未知数量的列表,每个列表上的项目数量可变?

时间:2012-09-11 17:40:08

标签: mysql database database-design

我想设计一些允许用户将清单放在一起的东西,比方说,杂货。如果每个用户可以有多个列表(即不是设定金额),并且这些列表上都有可变数量的项目(再次,未设置),而某些项目出现在几个不同的列表,怎么做我创建了一个没有多余冗余的数据库?

我对这类问题完全不熟悉,以前没有把任何复杂的数据库放在一起,也不知道从哪里开始。这就是我想出的一个例子,但我怀疑这是正确的做事方式:

enter image description here

非常感谢任何帮助或想法!

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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

enter image description here

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

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

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

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

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

enter image description here