我不确定拥有 3 个 self 引用是否正确,或者是否有其他方法可以应对这种情况。
我有一个表/实体“动物”(具有所有类型的基本字段,如 ID、名称、描述...),我想表示特定动物(例如狗):
“喜欢”一些动物(比方说......乌龟和牛) “讨厌”其他一些动物(猫、鸡) 并且与其他动物( pig 和马)“保持中立”
我看到的对该模式建模的唯一可能方式就像图片中那样。这 3 个关系是多对多 (NM),所以我最终创建了 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 |
| .. | ........... |
+----+-------------+
关于database - 三重 self 引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19554004/