我想在這里實作的事情是只獲取具有“責任”角色的員工的 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')
);
uj5u.com熱心網友回復:
在我看來,您需要查看 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'
db<>在這里擺弄
uj5u.com熱心網友回復:
如果如您所展示的那樣直接可能,那就太好了,但事實并非如此。一種方法是創建一個責任表。另一個是這樣的:
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)
);
部門表有一個復合外鍵參考員工 ID 和角色的組合(盡管單獨的 ID 在員工表中已經是唯一的),因此它可以對角色設定檢查約束,從而僅鏈接到負責人。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/433454.html
