[英]how can i Create FOREIGN KEY with condition?
我想在這里實現的是只獲取具有“負責”角色的員工的 ID,我已經嘗試了以下語句,但它是語法錯誤
/*CREATE TABLE employes_tbl(
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
username VARCHAR(255) NOT NULL UNIQUE,
password VARCHAR(255) NOT NULL,
matricule CHAR(4) NOT NULL UNIQUE,
role VARCHAR(255) NOT NULL ,
firstName VARCHAR(255) NOT NULL,
lastname VARCHAR(255) NOT NULL,
email VARCHAR(255) NOT NULL,
cin VARCHAR(255) NOT NULL UNIQUE,
date_em date NOT NULL,
departement VARCHAR(255) NOT NULL,
fonction VARCHAR(255) NOT NULL,
responsable VARCHAR(255) NOT NULL,
burreaux VARCHAR(255) NOT NULL,
post VARCHAR(255) NOT NULL ,
address VARCHAR(255) NOT NULL,
photo VARCHAR(255) NOT NULL,
phone_portable VARCHAR(255) NOT NULL UNIQUE,
phone_fix VARCHAR(255) NOT NULL UNIQUE,
phone_extenstion VARCHAR(255) NOT NULL UNIQUE
);
*/
CREATE TABLE departments(
id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
department_name VARCHAR(255) NOT NULL,
responsable_id INT NOT NULL,
FOREIGN KEY (responsable_id) REFERENCES employes_tbl(id WHERE role='responsable')
);
在我看來,您需要對 DEPARTMENTS 的視圖顯示負責的員工。 所以像:
CREATE OR REPLACE VIEW department_responsable_view AS
SELECT d.id,
d.department_name,
e.id AS id_responsable_employee,
e.firstName
FROM departments d
LEFT OUTER JOIN employes_tbl e
ON e.departement = d.department_name AND
e.role = 'responsable'
如果像您所展示的那樣直接可行,那就太好了,但事實並非如此。 一種方法是創建一個負責人表。 另一個是這樣的:
CREATE TABLE employes_tbl(
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
...
role VARCHAR(255) NOT NULL ,
...
UNIQUE (id, role)
);
CREATE TABLE departments
(
id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
department_name VARCHAR(255) NOT NULL,
responsable_employee_id INT NOT NULL,
responsible_role VARCHAR(255) NOT NULL CHECK (responsible_role = 'responsable'),
FOREIGN KEY (responsable_employee_id, responsible_role)
REFERENCES employes_tbl(id, role)
);
departments 表有一個復合外鍵引用員工 ID 和角色的組合(盡管 ID 在員工表中已經是唯一的),因此它可以對角色設置檢查約束,從而只鏈接到負責人。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.