想象一下,你生活在非常簡單的例子土地 - 和想象你已經有了一個人在一個表你的MySQL數據庫:得到了一桌子的人,我要鏈接到對方是誰,許多一對多,與鏈接是雙向
create table person (
person_id int,
name text
)
select * from person;
+-------------------------------+
| person_id | name |
+-------------------------------+
| 1 | Alice |
| 2 | Bob |
| 3 | Carol |
+-------------------------------+
而這些人需要協作/協同工作,讓你有哪個環節一人記錄到其他的鏈接表:
create table person__person (
person__person_id int,
person_id int,
other_person_id int
)
這樣的設置意味着之間的聯繫人們是單向的 - 即愛麗絲可以鏈接到鮑勃,而鮑勃連接到愛麗絲,甚至w ORSE,愛麗絲可以鏈接到鮑勃和 Bob可以同時鏈接到愛麗絲,在兩個單獨的鏈接記錄。由於這些鏈接代表了工作關係,在現實世界中,它們都是雙向的相互關係。在這個設置中,以下是所有可能的:
select * from person__person;
+---------------------+-----------+--------------------+
| person__person_id | person_id | other_person_id |
+---------------------+-----------+--------------------+
| 1 | 1 | 2 |
| 2 | 2 | 1 |
| 3 | 2 | 2 |
| 4 | 3 | 1 |
+---------------------+-----------+--------------------+
例如,person__person_id = 4的上方,當您查看Carol的(爲person_id = 3)簡檔,應該看到與Alice的關係(爲person_id = 1),並且當您查看Alice的個人資料,即使鏈接以其他方式進行,您也應該看到與Carol的關係。
我知道我可以做工會和不同的查詢和諸如此類的東西呈現在用戶界面相互之間的關係,但有沒有更好的辦法?我有一種感覺,有是一個更好的辦法,一個地方這個問題會整齊地融化掉通過適當設置數據庫,但我不能看到它。任何人有更好的主意?
這是我從<50代表用戶見過的格式最好的問題!乾杯! – 2010-05-21 05:46:32
我將標記從'mysql many-to-many'更改爲'data-modeling many-to-many'(+1 nice question!) – lexu 2010-05-21 06:07:49
+1陳述得很好的問題。 nit-pick:person__person是一個可怕的表名;只是聲稱它是用於照明目的;) – msw 2010-05-21 06:25:59