问题标签 [self-referencing-table]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
230 浏览

database - 三重自我参考?

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

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

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

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

在此处输入图像描述

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

0 投票
1 回答
4936 浏览

java - 如何在hibernate中更改sql执行的顺序

我正在尝试使用有序的孩子来建模双向父子设计。

从父级删除子级(例如,3 个子级中的第 2 个子级)时,hibernate 生成的 sql 导致违反唯一约束,因为“更新”(兄弟)在“删除”(目标)之前执行。

我使用的 RDBMS (H2) 不支持延迟约束。除了以下之外,我还有哪些选择?

  • 从模式中删除唯一约束
  • 自己显式管理排序,而不是依赖休眠

有什么办法可以让休眠在“更新”之前生成“删除”的sql?


在论坛中找到了一些旧的讨论:

在集合中删除然后插入 - 执行 SQL 的顺序


数据库架构:

班级:

HBM 映射:

0 投票
3 回答
1009 浏览

sql - 在单个 SQL 查询和 Linq 查询中查找多个父母的所有孩子

我需要使用SELECT查询LINQ并且SQL结果为:

Table的是:

0 投票
1 回答
329 浏览

entity-framework - EF Code First 6 带有“多个”多对多自引用

我有一个这样的实体:

我想为“先决条件”和“等效项”创建不同的表。我该如何配置它?

0 投票
1 回答
2257 浏览

mysql - Laravel - 查询自引用表

我有一个自参考表,上面有新闻及其各自的翻译作为孩子。我要做的是查询每个父新闻的翻译语言,以显示在我的索引新闻页面中。在索引新闻页面中,我有一个表格,其中显示了我所有的父新闻:

  • 标题
  • 家长新闻语言
  • 儿童新闻语言(翻译)(这是我的问题!)
  • 编辑
  • 删除

有了这个,我想自动查看新闻的原始语言,并检查它是否已经被翻译。

我的代码是这样的:

语言
- id
- 代码


新闻- id
- parent_id
- lang_id -
标题
- 正文

楷模

语言.php

新闻.php

有谁知道如何查询这样的东西?我相信这可能不是检查翻译的最佳解决方案,所以如果有人有任何简化这个想法的建议,我会很高兴收到你的来信。

谢谢,

0 投票
4 回答
71 浏览

mysql - Mysql获取最新一行的自引用关系

我有一个评论表,允许人们编辑他们的评论。我没有覆盖评论,而是创建了一个新评论并将其关联到它的“父级”。此外,我将子信息添加到父级。

SQL小提琴在这里

现在我的问题是我想获取特定用户的所有评论,但只有评论的最新更新。

这让我头疼了一阵子,非常感谢您的意见!

0 投票
1 回答
1197 浏览

entity-framework - EF 6 Code First 多对多 带有效负载和自引用多对多

我有一个问题,我有一个多对多的关系,并且在其中一张桌子上会有一个多对多的自我引用。

所以基本上一所学校有零个或多个小组,许多小组可以有0个或多个学校。组表将包含一个与其自身多对多的父子,因为一个组可以是另一个组的子,或者它可以没有子,并且该子可以有一个子,一个子也可以有多个父,或者一个实体可以没有父母。

我用 Payload 创建了一个映射表来解决第一个多对多问题。代码片段

然后我尝试通过以下方式修改代码以实现自引用多对多

我用 has many 和一个自动映射表更改了上下文(请原谅我今天尝试了很多事情,我没有确切的代码)。我收到一个错误,类的属性必须匹配。

任何人都可以帮忙吗?

我想在多对多的自引用上创建导航属性。也将不胜感激种子示例

问候

0 投票
1 回答
253 浏览

sql - 具有交替表的递归 CTE

我在这里创建了一个 SQL 小提琴。

基本上,我有 3 个表BaseTable,Files和一个LinkingTable.

Files表有 3 列:PKBaseTableIdRecursiveId(ChildId)。我想要做的是找到给定一个BaseTableId(即ParentId)的所有孩子。棘手的部分是找到孩子的方式是这样的:

ParentId( BaseTable.BaseTableId) 1 并使用它FileIdFiles表中查找 a ,然后使用它FileId在 中查找ChildId( LinkingTable.RecursiveId) LinkingTable,如果该记录存​​在,则使用RecursiveIdinLinkingTable查找表中的下一个FileIdFiles依此类推。

到目前为止,这是我的 CTE:

= 1的正确输出BaseTableId应该是:

表关系

表关系

0 投票
1 回答
341 浏览

sql - 在 SQL 数据库中存储复杂的自引用树结构的最有效方法是什么?

我知道并在过去使用过两种基本树结构的方法:邻接列表和嵌套集。我了解这些方法的几个优点和缺点 - 例如,邻接列表更新速度快但查询速度慢,嵌套集则相反(更新速度慢,查询速度快)。

但是,我需要能够存储更复杂的树状结构。描述这一点的最好方法是使用人类家庭关系。我的第一个想法是每个元素都可以有一个“祖先”树和一个“后代”树。但是,这种方法会有很大的冗余,因为使用下面的示例,Cameron 和 Kelly 都将共享 Bob 的所有祖先树(并且更新将更加耗时,因为对树的插入实际上必须插入多棵树)。我的第二个想法是包含树引用。例如,假设 Alice 有她自己的祖先树。来自 Cameron 的祖先树的 (4,5) 元素和来自 Kelly 的祖先树的 (2,3) 元素都将简单地引用 Alice 的祖先树。第二种方法需要更少的数据存储,将体验更快的更新(仅更新单个树而不是多个树)并且将保留查询大型树结构的速度优势(尽管查询这种自引用嵌套集的 SQL比较复杂)。然而,第二种方法的一个缺点是数据变得“碎片化”(很像硬盘驱动器上的 inode)。

对于第二种方法,我正在可视化多个嵌套集合,它们彼此堆叠在一起,某些节点沿着 z 索引“画一条线”到另一个平面上的节点。

请注意,以上只是一个示例——我实际上并不是在存储人际关系,而是在存储复杂的树状数据。存储如此复杂的层次结构的原因有很多,所以我会让你尽情想象!

问题:在 SQL 数据库中存储复杂的自引用树结构的性能方面(更新和选择)最有效的方式是什么?我特别指的是 PostgreSQL,但如果你有替代品(甚至是 SQL 本身),我也愿意听到。

0 投票
0 回答
190 浏览

sql-server - 当插入的行相互引用时,我可以同时为自引用表插入多行吗?

我有一个自引用表,它有一个可以为空的唯一 FK 列,该列引用同一表中另一行的 PK。这形成了一个链表结构。

我已经完成了所有各种交互,包括插入 - 只需向后退,插入的第一个项目是链接列表中的最后一个项目,并且每个后续插入都引用之前的行号。

但是,我不喜欢多次插入来处理这个问题。有没有办法进行多行插入,其中插入的每一行都使用@@IDENTITY前一行的?

我想知道这样的事情,但@@IDENTITY只是返回null所有下一个值。

阅读MSDN 文档,这是有道理的,因为值在INSERT返回之后才设置,但问题是是否有一些聪明的方法可以以另一种方式实现相同的目标?