SQL 数据库设计 - 大权限 table
SQL Database design - Large permission table
我对现有数据库的用户权限设计有一个有趣的问题。
我们有一个庞大的 table 记录,其中包含超过 1000 万条记录,现在的当权者需要单独的权限。
我马上觉得好吧,创建一个新的table,每个用户都有自己的列,访问是用一个位值完成的。
[U1] [U2] [U3] [U4] etc.
=============================================
Record 1 | 1 | 0 | 1 | 0 |
Record 2 | 0 | 0 | 1 | 1 |
Record 3 | 0 | 1 | 1 | 0 |
Record 4 | 1 | 0 | 1 | 1 |
然后我被告知预计会有 300 个用户,因为我们允许对数据库进行更多访问,这意味着 300 列:/
所以有人能想出更好的方法吗?如有任何想法或建议,我们将不胜感激。
就像我在评论中提到的那样,使用规范化方法。考虑到 allow/dey 的值是 bit
,您实际上可以只使用 2 列,即用户 ID 和记录 ID:
CREATE TABLE dbo.UserAllowPermissions (UserID int,
RecordID int);
ALTER TABLE dbo.UserAllowPermissions
ADD CONSTRAINT PK_UserRecordPermission
PRIMARY KEY CLUSTERED (UserID,RecordID);
然后你可以INSERT
你上面已有的数据,如下所示:
INSERT INTO dbo.UserAllowPermissions (UserID,
RecordID)
VALUES (1, 1),
(1, 4),
(2, 3),
(3, 1),
(3, 2),
(3, 3),
(3, 4),
(4, 2),
(4, 4);
如果要撤销某个用户的权限,只需删除相关行即可。例如,假设您要撤销用户 3 对记录 4 的权限:
DELETE
FROM dbo.UserAllowPermissions
WHERE UserID = 3
AND RecordID = 4;
而且,不出所料,如果您想授予用户权限,只需 INSERT
行:
INSERT INTO dbo.UserAllowPermissions (UserID, RecordID)
VALUES(5,1);
这将授予 ID 为 5 的用户访问 ID 为 1 的记录的权限。
我对现有数据库的用户权限设计有一个有趣的问题。
我们有一个庞大的 table 记录,其中包含超过 1000 万条记录,现在的当权者需要单独的权限。
我马上觉得好吧,创建一个新的table,每个用户都有自己的列,访问是用一个位值完成的。
[U1] [U2] [U3] [U4] etc.
=============================================
Record 1 | 1 | 0 | 1 | 0 |
Record 2 | 0 | 0 | 1 | 1 |
Record 3 | 0 | 1 | 1 | 0 |
Record 4 | 1 | 0 | 1 | 1 |
然后我被告知预计会有 300 个用户,因为我们允许对数据库进行更多访问,这意味着 300 列:/
所以有人能想出更好的方法吗?如有任何想法或建议,我们将不胜感激。
就像我在评论中提到的那样,使用规范化方法。考虑到 allow/dey 的值是 bit
,您实际上可以只使用 2 列,即用户 ID 和记录 ID:
CREATE TABLE dbo.UserAllowPermissions (UserID int,
RecordID int);
ALTER TABLE dbo.UserAllowPermissions
ADD CONSTRAINT PK_UserRecordPermission
PRIMARY KEY CLUSTERED (UserID,RecordID);
然后你可以INSERT
你上面已有的数据,如下所示:
INSERT INTO dbo.UserAllowPermissions (UserID,
RecordID)
VALUES (1, 1),
(1, 4),
(2, 3),
(3, 1),
(3, 2),
(3, 3),
(3, 4),
(4, 2),
(4, 4);
如果要撤销某个用户的权限,只需删除相关行即可。例如,假设您要撤销用户 3 对记录 4 的权限:
DELETE
FROM dbo.UserAllowPermissions
WHERE UserID = 3
AND RecordID = 4;
而且,不出所料,如果您想授予用户权限,只需 INSERT
行:
INSERT INTO dbo.UserAllowPermissions (UserID, RecordID)
VALUES(5,1);
这将授予 ID 为 5 的用户访问 ID 为 1 的记录的权限。