1
我試圖創建一個約束來檢查一個項目只能有一個員工的角色是項目負責人,但同時可以讓其他員工擁有不同的角色。SQL檢查約束
我的表定義:
CREATE TABLE employee
(employee_id INT NOT NULL PRIMARY KEY
,employee_role VARCHAR(15) NOT NULL
, CHECK (employee_role in ('project_leader', 'administrator', 'member'))
)
CREATE TABLE project
(project_id INT NOT NULL PRIMARY KEY
, name VARCHAR(50)
, employee_id INT NOT NULL
, employee_role VARCHAR(15) NOT NULL
, CONSTRAINT employee_project_FK
FOREIGN KEY (employee_id, employee_role)
REFERENCES employee (employee_id, employee_role)
, CONSTRAINT only_one_project_leader
CHECK (employee_role = 'project_leader')
) ;
這是我不清楚如何能夠在約束,我需要改變什麼來表達。如果有人會告訴我我做錯了什麼,我會很感激。
好的,如果我用CONSTRAINT only_one_project_leader CHECK(employee_role ='project_leader')創建ProjectEmployee表ProjectEmployee(project_idPK,employee_idPK,employee_roleFK)。這會解決問題嗎? – Roman
@ user1967222:如果project_leader是項目表的屬性,則不需要檢查約束,因爲您不能將多個ID放入該列。 –
這個解決方案的唯一缺點是項目負責人不會自動成爲項目員工(這可能或可能不是Oa的好東西)。但與德比,我不認爲有更好的解決方案。對於其他DBMS,部分唯一索引可以確保'projectemployee'表中的單個project_leader。 –