0

我試圖找到一個答案,但尚未能夠。我有一個場景,我有4個表格。 (我試圖簡化)SQL - 如何處理多個多對多關係

People 
Activities 
Risks 
Precautions 

這些鏈接在多個多對多的關係中。例如,

一個人可以做多種運動,多個人可以做同樣的運動。 一項運動可能有多種風險,多項運動可能會有相同的風險。 風險可以有多種預防措施,多種風險可以有相同的預防措施。

我看到3種方式與結表來做到這一點...

1.

People --------- 
       |- Junction Table 
Activities ----- 
       |- Junction Table 
Risks ---------- 
       |- Junction Table 
Precautions ---- 

2.

People ------------------------------------------------ 
                 |- Junction Table 
Activities ------------------------     | 
            |- Junction Table -- 
Risks ----------     | 
       |- Junction Table -- 
Precautions ---- 

3.

People ------------| 
Activities --------|-- 1 big junction table 
Risks -------------| 
Precautions -------| 

這是我被卡住了。我不知道該怎麼做,或者如果我甚至沒有正確地考慮它的開始。我覺得選項1是要走的路,但我不確定如何從一端到另一端進行查詢。例如...從一個人,選擇與他們有關的預防措施。

+1

Uff,絕對不會做第二個。鏈接這些連接表引入了維護噩夢(例如,嘗試刪除預防措施)。第三,因爲風險或預防措施與人無關,所以沒有意義,我不認爲將它們合併是有意義的(違反正常形式)。我認爲第一是最容易管理的方法。有關關係數據庫的事情有時候最簡單的結構並不是最簡單的。您將擁有選項1的表格最多,但是您已正確歸一化數據。如果需要,使用視圖來「簡化」數據。 –

回答

0

我會選擇1並加入查詢。 對於查詢實例: 從一個人,選擇注意事項綁他們

你應該得到的人從加入的人ID表人士及活動,然後加入一個與活動的風險和最終活動參加與預防措施上風險。最後,你會得到與一個人相關的預防措施。

0

一個人可以做多種運動,而多個人可以做同樣的運動。一項運動可能有多重風險,多項運動可能會有相同的風險。風險可以有多種預防措施,多種風險可以有相同的預防措施。

您需要在我看來,下面的表格:

  • 人民
  • 活動
  • 人們活動
  • 風險
  • 活性的風險
  • 注意事項
  • 風險Precauti ons

對於任何進一步的澄清不要猶豫,問我。

泰德。