2012-12-05 205 views
0

試着在這兒得到一些專業的想法哪個創建架構關係映射關係 - 外鍵或映射表

當我大致找到這個post的想法,但還是儘量獲得更多的思路選擇是好。

一個簡單的情形是這樣的:

class <--> Student <--> Teacher <--> class 

(假設一個老師可以教多類) 它是在一個圓形many-to-many關係的正常情況。查詢可以從任何對象開始到任何方向。那麼什麼可能是更好的設計?

我知道在一對一的關係中一個映射表肯定是浪費,但是映射表解決方案ONLY好,對於many-to-many關係,就像那篇文章提到的那樣?如果我們想擴大與方向的多對多關係。如果關係是one-direction而不是bidirectional,答案可能會不同嗎?

在此先感謝。

+0

您能解釋爲什麼您會考慮映射表嗎?另外,你能舉出一些你擔心關係方向的例子嗎? – RonaldBarzell

回答

4

一些簡單的規則:

對於一個一對一的關係,外鍵可以在任何關係中所涉及的表的舉行,引用其他表。

對於一對多關係,關係多方的表應該包含外鍵。

對於多對多的關係,您可以創建一個關聯表(您的術語中的映射表),這是第三個表,用於存放涉及多對多關係的兩個表的外鍵。

例如,假設我們有表STUDENT,CLASSTEACHER。通常,STUDENTCLASS之間存在多對多關係,並且從TEACHER到CLASS一對多(假設一個班只有一位老師)。因此,這些表格可能如下所示:

STUDENT: STUDENT_ID, STUDENT_NAME, etc. 
CLASS: CLASS_ID, TEACHER_ID (foreign key), CLASS_NAME, etc. 
TEACHER: TEACHER_ID, NAME, etc. 
STUDENT_CLASS (mapping table): STUDENT_ID (foreign key), CLASS_ID (foreign key), GRADE, etc. 
1

如果你有多對多的關係,那麼你需要一個映射表。實際上沒有其他合理的方式來存儲關係數據庫中多對多關係的信息(當然,有許多不合理的方法可以這樣做)。

如果你想要這種關係是單向的(這看起來很奇怪 - 我不能設想一種情況,即實體A與實體B有關係,其中B與A沒有關係,所以我傾向於如果你想實現類似的東西,懷疑數據模型是不正確的),你仍然會使用映射表。您可能會在存儲DIRECTION(即'A - > B'或'B - > A')的映射表中添加另一列。