我不确定拥有 3 个自我引用是否正确,或者是否有其他方法来应对这种情况。
我有一个表/实体“动物”(具有各种基本字段,如 id、名称、描述......),我想代表一种特定的动物(例如狗):
“喜欢”一些动物(比如说……乌龟和牛)“讨厌”一些其他动物(猫、鸡)并且对其他动物“中立”(猪和马)
我看到的建模这个模式的唯一可能的方式就像在图片中一样。这 3 个关系是多对多(NM)所以我最终创建了 3 个表来存储动物之间的关系
有更好的方法来表示场景吗?我错过了什么或做错了什么?
我不确定拥有 3 个自我引用是否正确,或者是否有其他方法来应对这种情况。
我有一个表/实体“动物”(具有各种基本字段,如 id、名称、描述......),我想代表一种特定的动物(例如狗):
“喜欢”一些动物(比如说……乌龟和牛)“讨厌”一些其他动物(猫、鸡)并且对其他动物“中立”(猪和马)
我看到的建模这个模式的唯一可能的方式就像在图片中一样。这 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 |
| .. | ........... |
+----+-------------+