【问题标题】:Need guidance creating parent - child relationship in database需要指导在数据库中创建父子关系
【发布时间】:2021-04-21 13:56:43
【问题描述】:

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

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

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

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

有没有办法做到这一点?

我考虑过创建一个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[] 之间使用外键关系的情况。

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

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

感谢任何帮助或建议。

【问题讨论】:

  • "我需要在 CHAR 和 CHAR[] 之间使用外键关系" - 不,你不需要。摆脱非规范化数组并创建适当的多对多关系。那么定义外键就完全没有问题了。另外:don't use char
  • 另外请注意,我对数据库结构/SQL/等还是很陌生,所以请原谅我的肉食。我想我明白了......我最初认为父母表不应该有同一个父母的多个实例,但在阅读更多之后,这似乎仍然是符合规范化规则的犹太教。所以parents 表中这样的内容是可以的:(id: A0001, child: A0003), (id: A0002, child: A0003), (id: A0002, child: A0004)
  • PS 感谢您对char 用法的提示...这里的所有text
  • 是的,这也是订单和产品之间的类似关系:一个 orderID 可以有多个 productID 以了解订单包含的内容。
  • @PaulT。主要区别在于父级也是一个样本,创建了这个递归,我遇到了问题。为了启用此解决方案,我现在有一个 parent - child ID 表,但我无法拥有主键,因为父项和子项都会重复。

标签: sql postgresql foreign-keys hasura


【解决方案1】:

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

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

样本

sample_id date project
A0001 2020/11/01 alpha
A0002 2020/11/01 beta
A0003 2020/11/05 gamma
A0004 2020/11/05 gamma

关系:

parent_sample_id child_sample_id
A0001 A0003
A0002 A0003
A0002 A0004
  • edit * 我已经修复了上面child_sample_id 表中缺少的0

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-05
    • 2015-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多