gpt4 book ai didi

MySQL表(重新)设计

转载 作者:太空宇宙 更新时间:2023-11-03 12:03:35 27 4
gpt4 key购买 nike

我们的应用程序中有“user”和“study”实体,存储在它们各自的表中。一项研究代表一种研究和已收集的数据。它们是多对多的关系,所以我们需要一个链接表:studies_users。

我们为用户分配角色。有一些“正常”角色是依赖于研究的,因此对于同一用户,它们可能会有所不同,具体取决于所选择的研究。这意味着这些类型的角色必须存储为 studies_users 表的一部分。

然而,有一个新的“特殊”角色的请求,我们称之为 super 管理员,这基本上意味着用户在各种研究中拥有所有可能的角色(或权限)。这意味着此类属性不必存储在 studies_users 链接表中,将其存储在用户表中的新列(例如 is_superadmin)中就足够了,因为它适用于所有研究。

但是,如果我将它与其他角色分开存储(在 users 表中),这似乎有点不合逻辑,并且可能导致处理相关逻辑的代码出现不必要的复杂性。

我应该将此类属性存储在链接表还是用户表中? 为什么?

表的一些非常基本的 SQL:

CREATE TABLE `users` (
`ID` int(10) unsigned NOT NULL AUTO_INCREMENT,
`EMAIL` varchar(100),
PRIMARY KEY (`ID`)
);

CREATE TABLE `studies` (
`ID` int(10) unsigned NOT NULL AUTO_INCREMENT,
`NAME` varchar(150),
PRIMARY KEY (`ID`)
);

CREATE TABLE `studies_users` (
`ID` int(10) unsigned NOT NULL AUTO_INCREMENT,
`STUDY_ID` int(10),
`USER_ID` int(10),
`ROLE_ID` tinyint(3),
PRIMARY KEY (`ID`)
);

最佳答案

如果您将数据库设计应用到现实世界中,“superadmin”是用户的一个属性,功能上仅由用户决定,因此应该在表用户中。是的,这会增加查询的复杂性,但当用户从 super 管理员变为“普通”时,会让你头疼;您只需更改标志,您的数据将始终保持一致。

关于MySQL表(重新)设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27760206/

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