2017-11-11 80 views
0

我正在爲醫院數據庫制定一個模式。我有4個表格,候選人詳細信息,醫院詳細信息,職位詳情和麪試詳情。面試表有一個外鍵指的候選人表,一個到位置的表,我也希望它有一個指的是醫院表,但我注意到有可能有一個元組,其中位置ID的組合並且醫院ID與位置表上發生的組合不同(位置表具有涉及醫院表的外鍵)。換句話說,可以在醫院中輸入不正確的醫院ID或位置ID採訪表。因此,例如在採訪表上,我可以輸入一個元組,其中職位ID是01,醫院ID是02,但是如果你去職位表,被推薦的職位ID可能很容易得到一個不同的醫院ID例如03)。Makine複合外鍵,指兩個不同的表格

我在想,可能會有創建一個複合外鍵,同時引用兩個不同的表。如果不是這樣,是解決問題的唯一方法,只需從採訪表中完全刪除醫院ID列?

我一直在使用mySQL工作臺,所以我手邊沒有任何SQL代碼,但如果需要額外的信息(例如ERR圖像)來回答這個問題,我會盡我所能來源。

回答

0

簡短的回答: 沒有,外鍵約束總是引用正好一個父表。

但是,如果我理解你的處境好了,你有4個表

candidate details. id 
hospital details. id 
position details. id, hospital_id 
interview details. candidate_id, hospital_id, position_id 

的問題是現在的位置和醫院之間的關係是多對多

簡單的方法EAV添加另一個表調用it hospital_postition,即擁有所有醫院的所有職位,然後將每個hospital_postition與採訪中的受訪者聯繫起來

candidate details. id 
hospital details. id 
position details. id 
hospital_postition. id, hospital_id, position_id 
interview details. candidate_id, hospital_position_id 
0

少即是多!

您有這個問題,因爲表格不是第三範式。 hospital_id不依賴於面試,它取決於職位,position_id不是這個能力的關鍵。

問問自己,我真的想在採訪表中記錄hospital_id嗎?您可能需要的所有信息都已存儲在職位表中。我可以想到的唯一理由是想要這個專欄的時候,你會在那個位置所在的醫院以外的醫院進行採訪。如果是這種情況,那麼你的模式已經是正確的,但你的問題意味着否則。

從採訪表中刪除hospital_id列,您的問題將奇蹟般消失。

在獲得表定義(SQL代碼)從MySQL工作臺的主題,試試這個:

  • 右鍵單擊模式瀏覽器
  • 選擇「發送到SQL編輯器」中的表名
  • 選擇「創建語句」