需要指导在数据库中创建父子关系

问题描述

有许多与父/子和多对多关系相关的问题,但我找不到一个似乎对我的需求有意义的问题。

我有一个“样本”数据库,让我们将其视为桶中的某种东西。每个样本都有一个关联的 ID。我想捕捉的是任何给定的样本都可以有一个父样本(即,通过将桶倒入一堆较小的罐子中,可以将一个样本分成多个新样本)。此外,一个样本可以有多个父样本;通过组合多个父样本创建一个新 jar。这里的关键是子样本和父样本代表相同的事物(样本),因此应该是同一个表的成员。

我从一个 samples 表开始,其中的列是 iddateprojectparentid一个字母数字 ID(即 A0001A0002),而 parent一个 ID 数组,应该返回到样本列表。换句话说,父必须samples的成员。

我无法在 idid 中的 parent 列表之间设置外键关系。

有没有办法做到这一点?

我想过创建一个 parents 表,但后来我可能有以下内容

samples
-------
id      date          project      parent
A0001   2020/11/01    alpha        []
A0002   2020/11/01    beta         []
A0003   2020/11/05    gamma        [A0001,A0002]
A0004   2020/11/05    gamma        [A0002]

parents
-------
id      children
A0001   [A0003]
A0002   [A0003,A0004]

我仍然遇到需要在 CHARCHAR[] 之间使用外键关系的情况。

我希望能够通过父数组中可用的 date 查询信息(例如 projectid)。我想我可以在数据库之外处理这个问题,但这似乎是一种黑客行为,而不是正确的方法

对于上下文,我使用的是 Postgresql v13.0 和 Hasura GraphQL v1.3.3。

感谢任何帮助或建议。

解决方法

通常在谈论人际关系时,一个孩子只有一个父母——尽管这并不是人际关系的运作方式。典型的例子是树结构。

您似乎只想要一个有向图。这表明有两个表:

样品

sample_id 日期 项目
A0001 2020/11/01 alpha
A0002 2020/11/01 测试版
A0003 2020/11/05 伽玛
A0004 2020/11/05 伽玛

关系:

parent_sample_id child_sample_id
A0001 A0003
A0002 A0003
A0002 A0004
  • 编辑 * 我已经修正了上面 0 表中缺失的 child_sample_id