我正在创建一个用于工作的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”指向另一名员工。这有意义吗?我将如何去做呢?
谢谢!
编辑:固定表
我正在尝试创建一个工作数据库。我有两种不同类型的用户:内部和外部。每种类型都有不同的属性,因此我为它们创建了两个单独的表。在我的内部表中,我具有以下字段:
f_name VARCHAR(32),
l_name VARCHAR(32),
empl_status_id INT,
admin_grp_id INT,
reliab_status_id INT,
supv_id INT
Run Code Online (Sandbox Code Playgroud)
我的外部表具有以下内容:
f_name VARCHAR(32),
l_name VARCHAR(32),
email VARCHAR(32),
phone VARCHAR(20),
org_id INT,
supv_id INT
Run Code Online (Sandbox Code Playgroud)
我意识到我可以创建一个单独的表,其中包含用户名和指向内部或外部的外键,但是除此之外,我还向我的内部表添加了一个外键约束,该约束引用supv_id了另一个内部用户。我叫它fk_supv_id。当我尝试对外部用户表执行相同操作时,我得到了ERROR 1005 (HY000)。
最初我无法弄清楚问题出在哪里,但是当我尝试使用其他名称来解决问题时,它就起作用了(即fk_supv_id,我没有像内部调用那样调用它fk_xtsupv_id)。
所以我的问题是,正确的方法是什么?这是两个不同表中的相同外键。在这两种情况下,它都是指内部用户。没有两个不同的名称,有没有办法做到这一点?或者我应该选择的名称理念的表和添加supv_id约束沿该表f_name,l_name和user_type?
建议和建议,
谢谢!:)
我正在尝试使用ON DELETE CASCADE我正在处理的数据库.似乎没有工作,所以我在一个简单的例子上测试了它没有成功.
CREATE TABLE foo (
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
data VARCHAR(10),
PRIMARY KEY (id)
)ENGINE=InnoDB;
CREATE TABLE foo2 (
id INT UNSIGNED NOT NULL,
data2 VARCHAR(10),
PRIMARY KEY (id),
CONSTRAINT fk_foo2_id FOREIGN KEY (id) REFERENCES foo(id) ON DELETE CASCADE
)ENGINE=InnoDB;
INSERT INTO foo (data) VALUE ('hello'),('world'),('mysql');
INSERT INTO foo2 (data2) VALUE ('hello2'),('world2'),('mysql2');
SELECT * FROM foo;
+----+-------+
| id | data |
+----+-------+
| 1 | hello |
| 2 | world |
| …Run Code Online (Sandbox Code Playgroud)