3
讓我們考慮我們有人A。 Person F是他的父親,人M是他的母親,人B是他的兄弟和人S是他的兒子。 每個人可能有很多關係。這就是爲什麼,我們要創造新的關係的表像下:如何用1條記錄存儲家庭關係信息
人
+----+------+
| id | name |
+----+------+
| 1 | A |
| 2 | F |
| 3 | M |
| 4 | B |
| 5 | S |
+----+------+
關係型
+----+---------+
| id | value |
+----+---------+
| 1 | Father |
| 2 | Mother |
| 3 | Brother |
| 4 | Son |
| 5 | Wife |
| 6 | Husband |
+----+---------+
關係
+----+----------+------------+------+
| id | PersonID | RelativeID | Type |
+----+----------+------------+------+
| 1 | 1 | 2 | 1 |
| 2 | 1 | 3 | 2 |
| 3 | 1 | 4 | 3 |
| 4 | 1 | 5 | 4 |
| 5 | 2 | 1 | 4 |
| 6 | 2 | 3 | 5 |
| 7 | 3 | 1 | 4 |
| ...... |
+----+----------+------------+------+
在這種情況下,第1行意味着2 is father of 1
(用於ID)和第五排意味着1 is son of 2
。在現實世界中,這兩行是等價的,但如果我不插入這些行中的一行,則不能使用存在的行來丟失行。
現在的問題是: 如何使結構,其中包含1行中的這2個含義?
有點offtopic(n ot回答你的問題),但我建議保留現有的設計。如果你開始使用PersonID和RelativeID'對稱',那麼你的所有查詢變得更復雜(或更慢)。同樣,當你需要三個或更多的相關人員時,你的數據可能會有一些未來的擴展(比如與許多參與者相關的事件) - 在目前的設計中,這不是問題。您可以使用觸發器同步雙記錄。 – Arvo 2015-03-19 07:57:00
猜測'關係(id,personA,personB,AtoB_type,BtoA_type)'可以幫忙嗎? – amow 2015-03-19 08:24:10