gpt4 book ai didi

mysql - 为了创建我的帖子中解释的关系,我是否需要超过当前的 3 个表?

转载 作者:行者123 更新时间:2023-12-03 22:34:08 26 4
gpt4 key购买 nike

我正在尝试创建一个名为 Discord 的非常流行的应用程序的克隆,它允许人们通过语音、视频和文本进行交流。
Discord 允许每个用户创建自己的服务器并邀请其他人加入。为了让用户创建服务器,我首先创建了2个表——usersservers

Users table:
id, username, password
Servers table:
id, name, image, userId
所以这两个表之间的关系是一个 user 可以创建并有很多 servers 并且一个 server 属于一个 user 。到现在为止还挺好。
创建 server 后, users 可以作为该 server 的成员加入 server 。一个 user 可以加入任意数量的 servers,一个 server 可以有多个成员。我通过创建 server_users 连接表和 usersservers 之间的多对多关系来实现这一点:
Server_Users table:
id, userId, serverId
这工作正常,但是,我不确定 usersservers 之间多对多关系背后的逻辑是否合理。对我来说,我似乎在用户和服务器之间应用了 2 种关系,但我不知道这是否正确。也许我需要更多的表格来明确关系?
  • User 有很多 servers,一个 server 属于一个 user (因为 userserver 的所有者/创建者,而 server 只属于 1 个 user - 他的创建者)
  • Server 有很多 usersusers 有很多 servers (因为在每个 server 可以有很多成员,每个成员都可以是许多服务器的一部分)
  • 最佳答案

    我认为这是很好的设计,几乎是教科书的例子。目标是表在 normal form 中,这里就是这种情况。
    如果您想“合并”这两个关系,另一种设计也包含三个表,还可以使用 Server_Users 来存储拥有服务器的用户,用 bool 列标记为这样的用户。但是,我认为使用外键 (userId) 的方式更有效,因为对于 1 对 N 关系,您只需要一个连接。
    我还要补充一点,表格的设计不仅受到“理论上”正确处理的启发,而且还受到您的用例的启发。选择设计取决于您将针对数据库运行的查询类型。如果您列出服务器上的所有用户,包括所有者,但从不单独列出所有者,则替代方法可能会更快。
    另一个方面是完整性约束:您是否要求服务器的所有者也是该服务器的成员,还是完全独立?这也会影响设计。
    在不经常更新的大量数据的上下文中,另一种方法是通过将用户(复制)嵌套在服务器元组中来对所有内容进行非规范化。

    关于mysql - 为了创建我的帖子中解释的关系,我是否需要超过当前的 3 个表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63251661/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com