SQL:一次声明一个特定的字段

时间:2017-12-27 19:05:42

标签: sql

我遇到了SQL问题。我需要创建一个表来填写所有要求: - 只有users表中的用户可以存在于users_roles中。 - 只有角色表中的角色可以存在于users_roles中。 - 用户只能拥有一次特定角色。

TABLE users
id INTEGER NOT NULL PRIMARY KEY,
userName VARCHAR(50) NOT NULL

TABLE roles
id INTEGER NOT NULL PRIMARY KEY,
role VARCHAR(20) NOT NULL

创建表的我的代码:

CREATE TABLE users_roles (
  userId INTEGER NOT NULL,
  roleId INTEGER NOT NULL,
  FOREIGN KEY(userId) REFERENCES users(id),
  FOREIGN KEY(roleId) REFERENCES roles(id)
)

而且,问题是我缺少要求“ - 用户只能拥有一次特定的角色。”有人知道如何申报吗?

以下陈述应该通过。

INSERT INTO users_roles(userId, roleId) VALUES(1, 1);
INSERT INTO users_roles(userId, roleId) VALUES(1, 2);
INSERT INTO users_roles(userId, roleId) VALUES(2, 2);

下面的陈述应该失败。

INSERT INTO users_roles(userId, roleId) VALUES(2, NULL);

2 个答案:

答案 0 :(得分:1)

你的最后一个条件只是一个独特的约束:

CREATE TABLE users_roles (
  userId INTEGER NOT NULL,
  roleId INTEGER NOT NULL,
  FOREIGN KEY (userId) REFERENCES users (id),
  FOREIGN KEY (roleId) REFERENCES roles (id),
  UNIQUE (userId, roleId)
);

答案 1 :(得分:0)

只需将其添加到表架构:

PRIMARY KEY (`userId`, `roleId`)