我想设计一些允许用户将列表放在一起的东西,比方说,杂货。如果每个用户可以有多个列表(即不是固定数量)并且这些列表上都有可变数量的项目(同样,未设置),而一些项目出现在几个不同的列表中,如何我创建了一个没有可怕冗余的数据库?
我对这类问题完全陌生,之前没有组合过任何复杂的数据库,也不知道从哪里开始。这是我想出的例子,但我怀疑这是正确的做事方式:
如有任何帮助或想法,我们将不胜感激!
最佳答案
看起来你需要类似这样的东西:
列表对用户是私有(private)的,但一个项目可以在多个列表之间共享:
- USER 和 LIST 之间的关系是一对多的,通过一个简单的外键建模。
- LIST 和 ITEM 之间的关系是多对多的,由它们之间的连接(又名链接)表建模:LIST_ITEM。
我在上图中使用了 USER 和 LIST 之间的标识关系,在“下游”表中生成了更多“自然”键:
- 减少对 JOIN 的需求(您已经知道给定 LIST_ITEM 属于哪个 USER,无需使用 LIST JOIN)。
- 但使下游键“更胖”。
在 USER 和 LIST 之间使用非标识关系(生成“更 slim ”的键)的设计如下所示:
关于mysql - 未知数量列表的数据库设计,每个列表上的项目数量可变?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12375070/