database - 三重 self 引用?

标签 database database-design entity-relationship self-referencing-table

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

我有一个表/实体“动物”(具有所有类型的基本字段,如 ID、名称、描述...),我想表示特定动物(例如狗):

“喜欢”一些动物(比方说......乌龟和牛) “讨厌”其他一些动物(猫、鸡) 并且与其他动物( pig 和马)“保持中立”

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

enter image description here

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

最佳答案

您可以按照我在下面描述的方式对其进行建模,它只需要三个表,并且可以让您拥有诸如“狗讨厌猫”但“猫喜欢狗”之类的条件。

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/

相关文章:

c# - Entity Framework - 多对多关系

c# - 两个模型之间的关系错误在asp.net core 2.1中有更多的键

c# - Entity Framework ,我可以将一个类映射到一个键/值表吗?

mysql - 从文本文件中的术语列表创建 MySQL 表

php - 如何在数据库中获取和存储时间戳

c# - Entity Framework 将聚簇索引与主键分开

mysql - 何时用 ID 替换数据库列

php - 来自多个订单的发票?

database - Jquery flowplayer a href 需要两次点击?

objective-c - 特定关系的核心数据 NSFetchRequest?