gpt4 book ai didi

mysql - 不同角色用户的最佳表结构

转载 作者:搜寻专家 更新时间:2023-10-30 20:19:24 25 4
gpt4 key购买 nike

我们正在开发一个网站,该网站将具有大约 5 个不同的用户角色,每个角色具有不同的属性。在当前版本的数据库架构中,我们有一个用户表,其中包含所有用户及其所有属性。

问题是我们需要的属性因用户角色而异。所有用户都具有相同的基本属性,例如姓名、电子邮件地址和密码。但最重要的是,属性因角色而异。有些有社交媒体链接,有些有发票地址等。总共可能有多达 60 列(属性),每个用户角色仅使用其中的一部分。

表中总共可能有大约 250,000 个用户,其中最大部分(大约 220,000)属于单个用户角色(并使用 60 列中的大约 20 列)。其他 30,000 名用户分为四个其他规则,并使用其他 40 列的子集。

从数据库作为开发的角度来看,最好的数据库结构是什么?我的想法是有一个基本的 users 表,然后用像 users_ moderators 这样的表扩展它,但这可能会导致很多加入的查询。防止这种情况发生的一种方法是使用 VIEW,但我读过一些(过时的?)文章,认为 VIEW 可能会损害性能,例如:http://www.mysqlperformanceblog.com/2007/08/12/mysql-view-as-performance-troublemaker/ .

“完美”的结构是否存在?任何建议,或者这根本不是问题,我们是否应该将所有用户放在一个大表中?

最佳答案

有两种不同的方法可以解决这个问题。一种称为“单表继承”。这基本上就是您征求意见的设计。它非常快,因为没有连接。然而,NULL 可能会在很小的程度上影响吞吐量,因为与较薄的行相比,较胖的行需要更长的时间才能进入内存。

另一种设计称为“类表继承”。在这个设计中,父类(super class)一张表,每个子类一张表。非键属性进入它们所属的表。通常,一种称为“共享主键”的设计可以与此设计一起使用。在共享主键中,子类表的键id是父类表中相应行的id的副本。

这在插入时需要做一些工作,但是当您去连接数据时它会收回成本。

您应该在 SO(它们有自己的标签)或网络上查找所有这三个。您将获得有关设计的更多详细信息,并了解每种设计与您的案例的匹配程度。

关于mysql - 不同角色用户的最佳表结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13660154/

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