sql 服务器,如何创建具有重复值的键
sql server, How to create a key with duplicated values
我正在 sql 服务器上为 RBAC 创建一个模型。我有我的 table 权限和另一个角色。我的疑问是,如何使角色成为具有重复值的键。
这是一个片段:
CREATE TABLE permissions (permission int NOT NULL, name varchar(50) NOT NULL, PRIMARY KEY (permission))
INSERT INTO permissions (permission, name) VALUES (1, 'createUser')
INSERT INTO permissions (permission, name) VALUES (2, 'deleteUser')
INSERT INTO permissions (permission, name) VALUES (4, 'editUserInfo')
INSERT INTO permissions (permission, name) VALUES (8, 'grantPermissions')
CREATE TABLE roles (role varchar(50) NOT NULL, permission int NOT NULL, FOREIGN KEY (permission) REFERENCES permissions(permission))
INSERT INTO roles (role, permission) VALUES ('admin', 1)
INSERT INTO roles (role, permission) VALUES ('admin', 2)
INSERT INTO roles (role, permission) VALUES ('admin', 4)
INSERT INTO roles (role, permission) VALUES ('admin', 8)
你不能也不想那样做。您的 roles
table 每个角色应该有 1 行。但是随后您添加了第三个 table 作为 roles
和 permissions
table 之间的映射。
像这样:
roles <----> role_permission_mappings <----> permissions
因此您的 roles
table 的密钥将是 role
.
而您的 role_permission_mappings
table 的密钥将是 (role,permission)
.
编辑
SQL Fiddle 的示例。
我正在 sql 服务器上为 RBAC 创建一个模型。我有我的 table 权限和另一个角色。我的疑问是,如何使角色成为具有重复值的键。
这是一个片段:
CREATE TABLE permissions (permission int NOT NULL, name varchar(50) NOT NULL, PRIMARY KEY (permission))
INSERT INTO permissions (permission, name) VALUES (1, 'createUser')
INSERT INTO permissions (permission, name) VALUES (2, 'deleteUser')
INSERT INTO permissions (permission, name) VALUES (4, 'editUserInfo')
INSERT INTO permissions (permission, name) VALUES (8, 'grantPermissions')
CREATE TABLE roles (role varchar(50) NOT NULL, permission int NOT NULL, FOREIGN KEY (permission) REFERENCES permissions(permission))
INSERT INTO roles (role, permission) VALUES ('admin', 1)
INSERT INTO roles (role, permission) VALUES ('admin', 2)
INSERT INTO roles (role, permission) VALUES ('admin', 4)
INSERT INTO roles (role, permission) VALUES ('admin', 8)
你不能也不想那样做。您的 roles
table 每个角色应该有 1 行。但是随后您添加了第三个 table 作为 roles
和 permissions
table 之间的映射。
像这样:
roles <----> role_permission_mappings <----> permissions
因此您的 roles
table 的密钥将是 role
.
而您的 role_permission_mappings
table 的密钥将是 (role,permission)
.
编辑
SQL Fiddle 的示例。