我有一个表名permission。这张桌子上有两栏。这两个列名是student和teacher。那两个是外键。以及它们的参考值来自user表。
我想做的是,如果存在一个用户id是student列,那么这个用户将能够做一些与学生相关的工作。而且,如果用户id存在于teacher列中,那么他将能够做一些与教师相关的工作。
这两列是外键。这两个值来自user表。用户id可以存在于两列中。所以我的问题是,我可以使用两个外键,其值来自同一个表吗?
或者我应该创建一个名为user_id的新列作为外键,然后如果student或teacher列值为该用户的1,则意味着如果该用户的student或teacher列的值为0,则表示学生有权执行某些允许的work.And,如果该用户的值是0,则表示该用户没有权限。
发布于 2018-02-19 02:50:42
我更希望您的第二条语句只有一列用于外键,而另有两列来区分它是学生还是教师,或者两者兼而有之,所以每个user_id都不会有重复的行。
CREATE TABLE permission
(
user_id INT,
is_student BIT,
is_teacher BIT,
-- other columns, if there is any
INDEX permission_user_id (user_id),
FOREIGN KEY (user_id) REFERENCES user(user_id)
)样本行:
+---------+------------+------------+
| user_id | is_student | is_teacher |
+---------+------------+------------+
| 001 | 1 | 0 |
+---------+------------+------------+
| 002 | 0 | 1 |
+---------+------------+------------+
| 003 | 1 | 1 |
+---------+------------+------------+或者它可以是一个允许的列:
CREATE TABLE permission
(
user_id INT,
privilege tinyint, -- 1 for student, 2 for teacher, 3 for both
-- other columns, if there is any
INDEX permission_user_id (user_id),
FOREIGN KEY (user_id) REFERENCES user(user_id)
)样本行:
+---------+-----------+
| user_id | privilege |
+---------+-----------+
| 001 | 1 |
+---------+-----------+
| 002 | 2 |
+---------+-----------+
| 003 | 3 |
+---------+-----------+https://stackoverflow.com/questions/48858816
复制相似问题