2017-02-13 41 views
2

我們對這些關係:如何在數據庫中實現這些實體關係?

Smith <=> Williams 
Williams <=> Thomas 
Smith <=> Thomas 
Smith <=> Jones 

這意味着威廉姆斯史密斯的朋友,反之亦然。
如果你想找到像威廉姆斯每個人的朋友,需要搜索雙方。
我在數據庫中應用這種關係是這樣的:

id name1  name2 
1 Smith  Williams 
2 Williams Thomas 
3 Smith  Thomas 
4 Smith  Jones 

或者這樣:

id name1  name2 
1 Smith  Williams 
2 Williams Smith 
3 Williams Thomas 
4 Thomas Williams 
5 Smith  Thomas 
6 Thomas Smith 
7 Smith  Jones 
8 Jones  Smith 

有沒有更好的解決辦法?

+1

你應該有一個id-name表和另一個代表關係的表,使用他們的id。 – Sebastianb

+2

它被稱爲多對多關係。谷歌它 – perissf

+0

我會去與第一個解決方案 – user489872

回答

1

你只需要兩個表:

[People]與標識和名稱 和表[Relationship]有兩個ID,每個FK以人ID。

請注意,您可以考慮雙向或單向關係,這實際上取決於您的實施。當然,如果你的關係是單向的,你需要在你的關係表中插入史密斯=> Jones和Jones < => Smith。

這是一個Many-to-Many關係,但注意不是關係在兩個不同的表之間(與維基百科示例中的作者和書籍不同),您正在執行同一個表中兩個不同實體之間的關係。

獎勵:如果您確實需要分類的那種關係的兩個人之間,你可以做到這一點與第三個表[RelationshipType]只是一個說明和標識和這個ID添加到關係表。