302*_*aya 5 mysql database relational-database
我正在创建一个用于工作的MySQL雇员数据库,并且希望它存储该雇员的主管。
假设我有一个名为“ employee”的表,其中的字段为“ id”,“ first_name”,“ last_name”和“ supv_id”,其中“ id”是主键,“ supv_id”是一个外键,它引用了员工ID 。
目前,我有“ supv_id”作为外键,它指向一个单独的表“ supervisor”。该表仅由指向员工表的'id'和'empl_id'组成。但是,如果有一种方法可以简单地使“ employee”中的“ supv_id”指向“ employee.id”,则将完全不需要我的“ supervisor”表。这是一个例子:
+----+--------+-----------+---------+
| id | f_name | l_name | supv_id |
+----+--------+-----------+---------+
| 1 | Han | Solo | NULL | //Or 0?
| 2 | Luke | Skywalker | 1 |
+----+--------+-----------+---------+
Run Code Online (Sandbox Code Playgroud)
简而言之,我希望“ supv_id”指向另一名员工。这有意义吗?我将如何去做呢?
谢谢!
编辑:固定表
您可以创建这样一个表,如下所示:
CREATE TABLE laya2 (
id INT NOT NULL PRIMARY KEY,
f_name VARCHAR(20),
l_name VARCHAR(20),
supv_id INT,
INDEX supv_id_idx (supv_id),
FOREIGN KEY (supv_id)
REFERENCES laya2(id)
ON DELETE SET NULL -- example for an action
) ENGINE=INNODB;
Run Code Online (Sandbox Code Playgroud)
我的示例将引用选项设置为 SET NULL,因为我认为这是这里的逻辑选项。如果一个监督其他人的员工离开了,那么这些员工首先就没有了监督者。另一种选择是拥有,NO ACTION因为您可以轻松识别那些没有有效主管的员工,并为他们找到新的主管。ON DELETE CASCADE这里是错误的,因为这些员工不会同时离开......
您可以插入员工
INSERT INTO laya2 VALUES
(1, 'Han', 'Solo', NULL),
(2, 'Luke', 'Skywalker', 1);
Run Code Online (Sandbox Code Playgroud)
(两次成功插入),但不包括
INSERT INTO laya2 VALUES
(3, 'Anakin', 'Skywalker', 0);
Run Code Online (Sandbox Code Playgroud)
该语句将失败,因为外键约束失败。
由于参考选项,删除汉·索罗会将卢克·天行者的supv_id更改为NULLON DELETE SET NULL
DELETE FROM laya2 WHERE id = 1; -- this will set the supv_id for Luke Skywalker to NULL
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1523 次 |
| 最近记录: |