1

林不知道是否有正確的3個自我引用或有其他方法來面對這種情況。三重自我參考?

我有一個表/實體「動物」(所有有點像ID,名稱,描述...基本域),我想表示一個特定的動物(例如狗):

「愛」一些動物(可以說...龜和奶牛) 「恨」的一些其他動物(貓,雞) 和「中性」與其他動物(豬和馬)

唯一可能的途徑我看到對這個模式的建模就像在圖片中。 3個關係是多對多(NM),所以我最終創建3個表來存儲動物

enter image description here

有一種更好的方式來表示的場景之間的關係? 我錯過了什麼或做錯了什麼?

回答

3

你可以用我在下面描述的方式來建模它,它只需要三張桌子,並且可以讓你有像「狗討厭貓」但「貓喜歡狗」的條件。

animals 
    id    unsigned int(P) 
    name   varchar(10) 

+----+----------+ 
| id | name  | 
+----+----------+ 
| 1 | dog  | 
| 2 | cat  | 
| 3 | cow  | 
| 4 | tortoise | 
| 5 | chicken | 
| 6 | pig  | 
| 7 | horse | 
| .. | ........ | 
+----+----------+ 

animals_feelings 
    id    unsigned int(P) 
    source_id  unsigned int(F animals.id) 
    feeling_id  unsigned int(F feelings.id) 
    target_id  unsigned int(F animals.id) 

+----+-----------+------------+-----------+ 
| id | source_id | feeling_id | target_id | 
+----+-----------+------------+-----------+ 
| 1 |   1 |   2 |   2 | 
| 2 |   1 |   1 |   3 | 
| 3 |   1 |   1 |   4 | 
| 4 |   1 |   3 |   6 | 
| 5 |   1 |   3 |   7 | 
| .. | ......... | .......... | ......... | 
+----+-----------+------------+-----------+ 

feelings 
    id    unsigned int(P) 
    description  varchar(10) 

+----+-------------+ 
| id | description | 
+----+-------------+ 
| 1 | loves  | 
| 2 | hates  | 
| 3 | is neutral | 
| .. | ........... | 
+----+-------------+ 
+0

非常漂亮和優雅的解決方案。謝謝你本尼:) – Kitinz