php - 对于此类数据,最佳的数据库设计是什么

标签 php mysql database

我有一个用户表,

每个 USR_ID 可以有多个角色、 View 、品牌和单位。

所以我想到的最优设计是这样的:

Users
USR_ID    USR_Username    USR_Password

Matrix
M_ID    M_USR_ID    M_ROLE_ID    M_VIEW_ID    M_BRAND_ID    M_UNIT_ID

_ROLES
ROLE_ID    ROLE_Name    ROLE_Active

_VIEWS
VIEW_ID    VIEW_Name    VIEW_Active

_BRANDS
BRAND_ID    BRAND_Name    BRAND_Active

_UNITS
UNIT_ID    UNIT_Name    UNIT_Active

所以基本上在矩阵表中,我保留了有关哪个用户做了什么的所有数据。

我的问题是,这是最优的结构和设计吗?除此之外,矩阵表中的行会是什么样子? 这是 ROLE_ID = 1 的某人的示例

Matrix
1    30    1    4    7    2    4

现在我想为该人添加另一个角色,下一行会是什么样子?我是否保留所有其他定义(品牌、单位、 View ...)的值?或者我是否只插入除 ROLE_ID 之外的所有内容?

非常感谢您的帮助,

谢谢

最佳答案

我不会使用你的矩阵表。相反,请使用交叉引用表。

链接用户和角色:

User_Roles
USR_ID    ROLE_ID

为每个表创建跨引用表:角色、 View 、品牌、单位。例如,通过这种方式,您可以为一个用户拥有多个单元,而无需将每个单元与特定角色绑定(bind)。您可以拥有三个单位、三个角色和三个品牌,而无需创建 27 个矩阵记录。

关于php - 对于此类数据,最佳的数据库设计是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3449072/

相关文章:

此 PHP 版本不支持 PHP openssl_sign() ecparam key 类型

php - 如何将数据传递给 Laravel 5 中的所有 View ?

mysql日期/时间计算

mysql - UNION SELECT CONCAT 在 MariaDB/MySQL 之间的工作方式不同

MySQL 错误 1217

php - 如何在.htaccess文件中添加错误页面

php - 白色日期和两个变量的问题

mysql - 如何进行 'groups' 许多 where 语句的选择查询

SQL Server 将 Table1 中的所有行与 Table2 中的所有行进行匹配

mysql - 发送电子邮件以编辑 MediaWiki