mysql - 数据库设计: User can be part of many lists,并且列表可以与多个用户关联

标签 mysql sql database sqlite database-design

因此,我正在尝试开发一个小型应用程序,它可以让您拥有一个可供多人通过手机编辑的购物 list 。所以我正在尝试设计将在后端使用的数据库。我无法弄清楚如何关联所有表格。用户将能够属于多个列表,并且每个列表都可供多人访问。 (我相信这就是所谓的多对多关系?) 到目前为止,我的表格如下所示:

User(id, name)
List(id, Name)
List_item(id, List_id(key), name, amount)

列表到 list_item ID 的关系很简单,但是如何对用户和列表之间的关系进行建模?我需要一个单独的连接表吗:

User-to-List(User ID,List ID)

我正在尝试提出尽可能最有效的结构,谢谢!

编辑:只有用户需要知道与他关联的所有列表,列表不需要跟踪与它关联的用户。至少对于最初的应用程序来说是这样!

最佳答案

多对多:

CREATE TABLE ListsUsers (
    list_id ...,
    user_id ..., 
    PRIMARY KEY(list_id, user_id),
    INDEX(user_id, list_id)
) ENGINE=InnoDB;

然后在执行 SELECT 时使用合适的 JOIN 连接表。

关于mysql - 数据库设计: User can be part of many lists,并且列表可以与多个用户关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33245047/

相关文章:

sql - 在 CockroachDB 中,是否会在后台对表元数据进行 WRITE 读取?

MySQL:多表 - 一对多关系,获取子列之一不为空的列

database - Redis的数据库模型分类

mysql - #2006 - 恢复 mysql 转储时 MySQL 服务器已经消失

php - 使用 _get 从隐藏输入中获取 id 并将其插入数据库

sql - 是否可以仅使用 Insert 和 Select 语句在 Redshift 中引发可序列化隔离冲突?

database - 使用 C# 和 MS Access Oledb 在 Windows 窗体中将表从一个数据库复制到另一个数据库

java - 多个 Activity 结果不会添加数据

java.sql.SQLException : Geometry byte string must be little endian

mysql - InnoDB 死锁后重复事务