【问题标题】:Modeling many to many relations with postgreSQL使用 postgreSQL 建模多对多关系
【发布时间】:2020-06-03 09:13:24
【问题描述】:

我从事养牛生产工作,我正在学习使用 postgreSQL 进行数据库设计。现在我正在研究一个数据库的实体属性关系模型,该模型允许注册牛放牧的牧场的分配。在这项业务的逻辑中,一只动物可以在其一生中被分配到几个放牧组。每个放牧组依次有一个持续时间,由几个牧场组成,动物根据轮换日历在其中放牧。这样,在特定时间,动物在属于放牧群的牧场放牧。

我有一种情况,可以将许多放牧组分配给许多动物以及许多牧场。尝试对这个问题建模时,我发现了一个扇形陷阱,因为单个表有两个一对多的关系。据此,我想问您如何处理这种类型的关系,其中一个实体以多对多关系的形式与另外两个实体相关。

我在这个问题上放了一张图表。

model diagram

谢谢

【问题讨论】:

  • use text, not images/links, for text--including tables & ERDs。转述或引用其他文本。只提供您需要的东西并将其与您的问题联系起来。仅将图像用于无法表达为文本或增强文本的内容。无法搜索或剪切和粘贴图像。在图片中包含图例/键和说明。
  • 有很多方法可以做 & 绘制 ER 设计图。请告诉我们你的是什么。 (例如教科书名称,版本和部分。)请询问您遇到的第一个问题。这里具体在哪里?表格(有时是行——也许这里就是这样)代表关系(船)/关联。 FK/参与被称为“关系”,但不是。在给出关系(船舶)/关联或表(基础或查询结果)时,说明其中的一行根据其列值说明了业务情况。澄清后,这将是一个常见问题解答。在开始时,每个 M:M 关系(船)/关联都会获得一个关联表。

标签: postgresql database-design many-to-many


【解决方案1】:

传统上,在两个表之间使用链接表(您称之为分配的表)是正确的方法来处理多对多关系。其他选择包括在放牧组中使用 ARRAY 的动物 ID,使用 JSONB 字段等。这些可能会在以后证明是有问题的,所以我建议采用旧方法。

如果您想跟踪历史记录,您可以添加一个 active 布尔字段(可能会添加到链接表中)以指示当前的分配,或者为每个分配添加一个 start dateend date。这也使得计划未来的任务成为可能。为了让事情变得更简单,让VIEWs 只显示当前分配,然后让VIEWs 显示JOINed 表格。

由于您的帖子中没有明确的问题,我只想说您走对了。

【讨论】:

    猜你喜欢
    • 2021-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-03
    • 2017-08-25
    • 1970-01-01
    • 2012-04-01
    • 2018-03-28
    相关资源
    最近更新 更多