2012-11-13 44 views
2

是否有可能根據WHERE部分使外鍵約束禁止關係?外鍵約束MySQL與WHERE部分

這可能聽起來不是很直接,所以我會試着用一個例子來解釋。

我們已經有了2 '正常' 表:

  • Person
  • Task

和正:

  • Team
  • :他們槽m之間的關係

一個任務可以在其下面有多個任務。所以我們做一個'樹'命令。同樣在task是一個布爾值,如果它是一個'團隊':isTeam;例如:

  • 清潔(isTeam: true
    • 清潔廁所樓下(isTeam: false
    • 清潔廁所樓上(isTeam: false
    • 擦拭一樓(isTeam: false
    • 擦拭二樓(isTeam: false
  • 晚餐(isTeam: true
    • 準備食物(isTeam: false
    • 準備表(isTeam: false
    • 等(isTeam: false

Person is in a Team (Team is one task with subtasks Image:人員處於小組(球隊是一個任務與(可能)子任務,並且isTeam = true)

Team表格顯示某個task的負責人,其中有tasks。 應該應用的限制:A Person只能附加到TaskTask s isTeam=true

這可能嗎?

PS(我在想,能不能做到用一個view只選擇TasksisTeam=true?)

回答

0

在這個模型中,closure table用來代表一棵樹。

  • 葉節點(任務)具有JobType = 'P'(需要人)
  • 其他節點JobType = 'T'(需要團隊)
  • 是一組分配給工作人。
  • 只分配給工作JobType = 'T'
  • 一個可以被分配到多個
  • 可以僅分配給任務JobType = 'P'
  • 一個可分配只有當也是任務的祖先團隊成員的任務。

enter image description here