Sql server 使用其他表中的数据和用户定义的约束创建表
以下两个表用于定义用户及其各自的角色:Sql server 使用其他表中的数据和用户定义的约束创建表,sql-server,Sql Server,以下两个表用于定义用户及其各自的角色: CREATE TABLE users ( id INTEGER NOT NULL PRIMARY KEY, userName VARCHAR(50) NOT NULL ) CREATE TABLE roles ( id INTEGER NOT NULL PRIMARY KEY, role VARCHAR(20) NOT NULL ) users_roles表应包含每个用户与其角色之间的映射。 每个用户可以有多
CREATE TABLE users
(
id INTEGER NOT NULL PRIMARY KEY,
userName VARCHAR(50) NOT NULL
)
CREATE TABLE roles
(
id INTEGER NOT NULL PRIMARY KEY,
role VARCHAR(20) NOT NULL
)
users_roles表应包含每个用户与其角色之间的映射。
每个用户可以有多个角色,每个角色可以有多个用户。修改提供的SQLite create table语句,以便:
CREATE TABLE users_roles
(
userId integer NOT NULL,
roleId integer NOT NULL,
PRIMARY KEY (userId, roleId),
FOREIGN KEY (userId) REFERENCES users(id),
FOREIGN KEY (roleId) REFERENCES roles(id)
)
它解决了许多问题,但有一个大问题
如果角色表中存在重复项,例如
id | role
---+-------
1 | hr
2 | hr
3 | cse
在users_roles表中,仍然有
users.id | roles.id
---------+----------
1 | 1
1 | 2
用户id 1与角色id 1和2都匹配。但是1和2有角色hr,因此它违反了最后一点
为了解决此问题,我还需要在“创建
用户\u角色”表中执行哪些操作?通过添加约束来防止角色表上的重复:
ALTER TABLE [roles]
ADD CONSTRAINT [UC_roles_role] UNIQUE NONCLUSTERED ([role] ASC)
WITH (STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF) ON [PRIMARY]
是SQLLite还是SQL Server?问题在于角色
表,而不是用户角色
表。