问题标签 [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.
database - 三重自我参考?
我不确定拥有 3 个自我引用是否正确,或者是否有其他方法来应对这种情况。
我有一个表/实体“动物”(具有各种基本字段,如 id、名称、描述......),我想代表一种特定的动物(例如狗):
“喜欢”一些动物(比如说……乌龟和牛)“讨厌”一些其他动物(猫、鸡)并且对其他动物“中立”(猪和马)
我看到的建模这个模式的唯一可能的方式就像在图片中一样。这 3 个关系是多对多(NM)所以我最终创建了 3 个表来存储动物之间的关系
有更好的方法来表示场景吗?我错过了什么或做错了什么?
java - 如何在hibernate中更改sql执行的顺序
我正在尝试使用有序的孩子来建模双向父子设计。
从父级删除子级(例如,3 个子级中的第 2 个子级)时,hibernate 生成的 sql 导致违反唯一约束,因为“更新”(兄弟)在“删除”(目标)之前执行。
我使用的 RDBMS (H2) 不支持延迟约束。除了以下之外,我还有哪些选择?
- 从模式中删除唯一约束
- 自己显式管理排序,而不是依赖休眠
有什么办法可以让休眠在“更新”之前生成“删除”的sql?
在论坛中找到了一些旧的讨论:
数据库架构:
班级:
HBM 映射:
sql - 在单个 SQL 查询和 Linq 查询中查找多个父母的所有孩子
我需要使用SELECT
查询LINQ
并且SQL
结果为:
我Table
的是:
entity-framework - EF Code First 6 带有“多个”多对多自引用
我有一个这样的实体:
我想为“先决条件”和“等效项”创建不同的表。我该如何配置它?
mysql - Laravel - 查询自引用表
我有一个自参考表,上面有新闻及其各自的翻译作为孩子。我要做的是查询每个父新闻的翻译语言,以显示在我的索引新闻页面中。在索引新闻页面中,我有一个表格,其中显示了我所有的父新闻:
- 标题
- 家长新闻语言
- 儿童新闻语言(翻译)(这是我的问题!)
- 编辑
- 删除
有了这个,我想自动查看新闻的原始语言,并检查它是否已经被翻译。
我的代码是这样的:
表
语言
- id
- 代码
新闻- id
- parent_id
- lang_id -
标题
- 正文
楷模
语言.php
新闻.php
有谁知道如何查询这样的东西?我相信这可能不是检查翻译的最佳解决方案,所以如果有人有任何简化这个想法的建议,我会很高兴收到你的来信。
谢谢,
mysql - Mysql获取最新一行的自引用关系
我有一个评论表,允许人们编辑他们的评论。我没有覆盖评论,而是创建了一个新评论并将其关联到它的“父级”。此外,我将子信息添加到父级。
现在我的问题是我想获取特定用户的所有评论,但只有评论的最新更新。
这让我头疼了一阵子,非常感谢您的意见!
entity-framework - EF 6 Code First 多对多 带有效负载和自引用多对多
我有一个问题,我有一个多对多的关系,并且在其中一张桌子上会有一个多对多的自我引用。
所以基本上一所学校有零个或多个小组,许多小组可以有0个或多个学校。组表将包含一个与其自身多对多的父子,因为一个组可以是另一个组的子,或者它可以没有子,并且该子可以有一个子,一个子也可以有多个父,或者一个实体可以没有父母。
我用 Payload 创建了一个映射表来解决第一个多对多问题。代码片段
然后我尝试通过以下方式修改代码以实现自引用多对多
我用 has many 和一个自动映射表更改了上下文(请原谅我今天尝试了很多事情,我没有确切的代码)。我收到一个错误,类的属性必须匹配。
任何人都可以帮忙吗?
我想在多对多的自引用上创建导航属性。也将不胜感激种子示例
问候
sql - 具有交替表的递归 CTE
我在这里创建了一个 SQL 小提琴。
基本上,我有 3 个表BaseTable
,Files
和一个LinkingTable
.
该Files
表有 3 列:PK
、BaseTableId
、RecursiveId
(ChildId)。我想要做的是找到给定一个BaseTableId
(即ParentId)的所有孩子。棘手的部分是找到孩子的方式是这样的:
取ParentId
( BaseTable.BaseTableId
) 1 并使用它FileId
在Files
表中查找 a ,然后使用它FileId
在 中查找ChildId
( LinkingTable.RecursiveId
) LinkingTable
,如果该记录存在,则使用RecursiveId
inLinkingTable
查找表中的下一个FileId
,Files
依此类推。
到目前为止,这是我的 CTE:
= 1的正确输出BaseTableId
应该是:
表关系
sql - 在 SQL 数据库中存储复杂的自引用树结构的最有效方法是什么?
我知道并在过去使用过两种基本树结构的方法:邻接列表和嵌套集。我了解这些方法的几个优点和缺点 - 例如,邻接列表更新速度快但查询速度慢,嵌套集则相反(更新速度慢,查询速度快)。
但是,我需要能够存储更复杂的树状结构。描述这一点的最好方法是使用人类家庭关系。我的第一个想法是每个元素都可以有一个“祖先”树和一个“后代”树。但是,这种方法会有很大的冗余,因为使用下面的示例,Cameron 和 Kelly 都将共享 Bob 的所有祖先树(并且更新将更加耗时,因为对树的插入实际上必须插入多棵树)。我的第二个想法是包含树引用。例如,假设 Alice 有她自己的祖先树。来自 Cameron 的祖先树的 (4,5) 元素和来自 Kelly 的祖先树的 (2,3) 元素都将简单地引用 Alice 的祖先树。第二种方法需要更少的数据存储,将体验更快的更新(仅更新单个树而不是多个树)并且将保留查询大型树结构的速度优势(尽管查询这种自引用嵌套集的 SQL比较复杂)。然而,第二种方法的一个缺点是数据变得“碎片化”(很像硬盘驱动器上的 inode)。
对于第二种方法,我正在可视化多个嵌套集合,它们彼此堆叠在一起,某些节点沿着 z 索引“画一条线”到另一个平面上的节点。
请注意,以上只是一个示例——我实际上并不是在存储人际关系,而是在存储复杂的树状数据。存储如此复杂的层次结构的原因有很多,所以我会让你尽情想象!
问题:在 SQL 数据库中存储复杂的自引用树结构的性能方面(更新和选择)最有效的方式是什么?我特别指的是 PostgreSQL,但如果你有替代品(甚至是 SQL 本身),我也愿意听到。
sql-server - 当插入的行相互引用时,我可以同时为自引用表插入多行吗?
我有一个自引用表,它有一个可以为空的唯一 FK 列,该列引用同一表中另一行的 PK。这形成了一个链表结构。
我已经完成了所有各种交互,包括插入 - 只需向后退,插入的第一个项目是链接列表中的最后一个项目,并且每个后续插入都引用之前的行号。
但是,我不喜欢多次插入来处理这个问题。有没有办法进行多行插入,其中插入的每一行都使用@@IDENTITY
前一行的?
我想知道这样的事情,但@@IDENTITY
只是返回null
所有下一个值。
阅读MSDN 文档,这是有道理的,因为值在INSERT
返回之后才设置,但问题是是否有一些聪明的方法可以以另一种方式实现相同的目标?