2017-05-27 55 views
0

如何檢查表中的以下一致性?驗證串行限制Mysql

表是這樣的:

Employee: 

employee_id | Name | job_title | department_name 

所有員工都具有相同的職位必須屬於同一個部門。

例如:作爲庫存經理工作的所有員工屬於 部門運輸。如果任何員工在其他 部門使用相同的職務工作,腳本必須顯示 的違反 以下格式上面定義的一致性約束。

職位名稱|僱員ID |部門名稱

+0

哪裏/你是怎麼定義'股票manager'應該屬於'運送'? – Utsav

+0

謝謝你的回覆。它沒有定義,但對於這個任務,我們假設股票經理屬於運輸部門。 –

+0

'假設'在編碼時不起作用。其他部門呢?如果你需要輸出,你需要有一個主源或類似的東西。 – Utsav

回答

0

沒有完全單獨CONSTRAINTS可能的,因爲你仍然需要依賴於不存儲數據。這可以通過另一個查詢表來討論JOB_TITLEDEPARTMENT之間的關係。

之前,除非是不是實現了關係,這一要求可能不會像您期望的工作。

以下應該做你所期望的:

CREATE TABLE JOB_DEPT_RELATIONSHIP AS (
    JOB_TITLE VARCHAR(255) NOT NULL PRIMARY KEY, 
    DEPARTMENT VARCHAR(255) NOT NULL, 
    UNIQUE(JOB_TITLE, DEPARTMENT) 
); 

那麼你實際的表可以被定義爲這樣的,我想:

CREATE TABLE EMPLOYEE AS (
    EMPLOYEE_ID INT AUTO_INCREMENT PRIMARY KEY, 
    EMPLOYEE_NAME VARCHAR(255) NOT NULL, 
    JOB_TITLE VARCHAR(255) NOT NULL, 
    DEPARTMENT_NAME VARCHAR(255) NOT NULL, 
    CONSTRAINT FK_JOB_DEPT_RELATIONSHIP FOREIGN KEY (JOB_TITLE, DEPARTMENT_NAME) REFERENCES JOB_DEPT_RELATIONSHIP(JOB_TITLE, DEPARTMENT) 
); 

希望這有助於!

+0

當然,您job_dept_relationship表上的唯一鍵只是說標題和部門的組合是唯一的,這不會停止在不同部門中擁有相同的標題。 –

+0

@NigelRen,它需要加強。我所建議的是一個近似解決方案(基於OP的假設)。 –

0

相信大家可能已經給出了同樣的任務,同時參加同一所大學。我現在就解決這個問題,這些表格可能會幫助其他人看到。我仍然習慣於在這裏格式化。

我不允許張貼圖片,所以我會嘗試發送一個鏈接,而不是,也許是適當的用戶可以編輯這個對我來說,謝謝:http://imgur.com/a/FeFRz