mysql - 未知数量列表的数据库设计,每个列表上的项目数量可变?

标签 mysql database database-design

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

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

enter image description here

如有任何帮助或想法,我们将不胜感激!

最佳答案

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

enter image description here

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

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

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

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

在 USER 和 LIST 之间使用非标识关系(生成“更 slim ”的键)的设计如下所示:

enter image description here

关于mysql - 未知数量列表的数据库设计,每个列表上的项目数量可变?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12375070/

相关文章:

c# - mysql表没有得到更新

数据库与许多表的关系以及 Entity Framework 中的表示

mysql - MySQL 两个数字之间序列的总和

php - fatal error : Call to a member function query() - php

使用 OR 运算符时 MySQL 查询变慢

c++ - 是否有支持大尺寸多维搜索的现有数据库(首选嵌入式数据库)?

php - 用户文件上传存储的最佳实践

mysql - 在 MySQL 表中存储运费,将来会添加许多列

mysql - 触发mysql相关表的插入

php - php和mysql的数据表数据量超过10000条记录