我可以使用多个外键,其值来自MySql中的同一个表

时间:2018-02-19 02:29:45

标签: mysql sql

我有一个表名permission。在这张表中,我有两列。这两个列名称为studentteacher。这两个是外键。他们的参考值来自user表。

我想要做的是,如果用户ID存在student列,则该用户将能够完成与学生相关的一些工作。而且,如果teacher列中存在用户ID,那么他将能够完成与教师相关的工作。

所以那两列都是外键。这两个值来自user表。用户ID可以存在于两列中。所以我的问题是我可以使用两个外键,其值来自同一个表吗?

或者我应该创建一个名为user_id的新列作为外键,然后如果该studentteacher列值为1,则表示该学生已拥有允许执行一些允许的工作。如果该用户的studentteacher列的值为0,则表示该用户没有权限。

1 个答案:

答案 0 :(得分:1)

我希望您的第二个语句只有一列外键,但是另外两列可以区分它是学生还是教师,或者两者都是如此,因此每个user_id都不会有重复的行。< / p>

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         |
+---------+-----------+