我有一个用户表,
每个USR_ID可以有多个角色,视图,品牌和单位。
所以我想到的最佳设计就是:
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
所以基本上在Matrix表中我保留了关于哪个用户做了什么的所有数据。
我的问题是,最佳结构和设计是什么?更进一步说,Matrix表中的行怎么样? 这是一个有ROLE_ID = 1
的人的例子Matrix
1 30 1 4 7 2 4
现在我想为那个人添加另一个ROLE,下一行会是什么样子?我是否保留所有其他定义(品牌,单位,视图......)的值?或者我只是插入除了ROLE_ID之外的所有NULL?
非常感谢您的协助,
谢谢,
答案 0 :(得分:3)
我不会使用你的矩阵表。相反,请使用交叉引用表。
链接用户和角色:
User_Roles
USR_ID ROLE_ID
跨每个表的参考表创建:角色,视图,品牌,单位。这样,您可以为多个单元创建多个单元,而无需将每个单元绑定到特定角色。您可以拥有三个单元,三个角色和三个品牌,而无需创建27个矩阵记录。
答案 1 :(得分:0)
(删除回复的开始,因为斯科特说它比我更快,更清楚地说了一分钟。)
对于您拥有的数据,矩阵设计过于平坦;你一定要考虑使用更规范化的设计。
你的问题不清楚的是角色/观点/品牌和单位之间是否有任何依赖关系。在设计表格时值得关注这一点 - 对于您的数据来说是一个愚蠢的例子:如果具有给定品牌的用户总是需要相同的单位,并且没有其他原因使用户拥有单位,那么您不需要将设备连接到用户,只需连接到品牌。但这是一个改进。
您的出发点绝对应该是Scott建议的设计:用户,角色,视图,品牌,单位和四个交叉引用表各一个表,用户将用户连接到其他四个。