【问题标题】:Database Design: User can be part of many lists, and lists can be associated with multiple users数据库设计:用户可以是许多列表的一部分,并且列表可以与多个用户相关联
【发布时间】:2016-01-19 14:35:48
【问题描述】:

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

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

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

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

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

编辑:只有用户需要知道他关联的所有列表,列表不需要跟踪哪个用户与其关联。至少对于初始应用而言!

【问题讨论】:

  • 是的,您提出的解决方案是可行的方法。
  • 您似乎忘记了 Items(id, name)。并从 List_item(idList, idItem,amount) 中删除名称
  • 我想将用户 ID 作为连接表中的主键以便能够更快地访问特定用户的列表?
  • 谷歌上关于多对多关系的教程是唯一的答案,那里有很多。一个提示,在连接表上做一个组合列 PK。
  • 感谢大家的帮助!

标签: mysql sql database sqlite database-design


【解决方案1】:

多对多:

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

然后在做SELECT时使用合适的JOINs连接表。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-07
    • 1970-01-01
    • 1970-01-01
    • 2010-10-24
    • 1970-01-01
    • 1970-01-01
    • 2023-01-03
    相关资源
    最近更新 更多