1

我不确定拥有 3 个自我引用是否正确,或者是否有其他方法来应对这种情况。

我有一个表/实体“动物”(具有各种基本字段,如 id、名称、描述......),我想代表一种特定的动物(例如狗):

“喜欢”一些动物(比如说……乌龟和牛)“讨厌”一些其他动物(猫、鸡)并且对其他动物“中立”(猪和马)

我看到的建模这个模式的唯一可能的方式就像在图片中一样。这 3 个关系是多对多(NM)所以我最终创建了 3 个表来存储动物之间的关系

在此处输入图像描述

有更好的方法来表示场景吗?我错过了什么或做错了什么?

4

1 回答 1

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  |
| .. | ........... |
+----+-------------+
于 2013-10-24T01:20:39.770 回答