问题标签 [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 回答
477 浏览

ssis - 如何导入具有自我关系的表

我有下表:

EntityId - PK
标签
ParentEntityId - FK

ParentEntityId 连接到同一张表的 EntityId。现在我在使用 SSIS 将数据导入此表时遇到问题,因为尚未导入父实体的实例,因此我遇到了 FK 约束违规。我可能遗漏了一些明显的东西。

0 投票
1 回答
5697 浏览

c# - 具有自引用实体的实体框架代码优先存储库模式

我正在尝试在 .NET 4.5 上实现 EF5 的存储库/工作单元模式,如下所述:http ://www.asp.net/mvc/tutorials/getting-started-with-ef-using-mvc /implementing-the-repository-and-unit-of-work-patterns-in-an-asp-net-mvc-application。这一切都很好,直到我尝试使用此处描述的自引用实体:http: //www.codeproject.com/Articles/206410/How-to-Configure-a-Self-Referencing-Entity-in-Code. 当我尝试对包含自引用实体 (FieldType) 的存储库执行任何操作(获取指定实体、获取所有实体、添加实体等)时,我在 UnitOfWork 类中的 FieldTypeRepository 的 getter 上收到 stackoverflowexception。别担心,在 stackoverflow 上发布 stackoverflowexception 的讽刺意味对我来说并没有丢失。我已经阅读了很多关于 EF 存储库模式的 SO 文章,但没有看到任何将它们与自引用实体结合起来的东西。

我尝试过的事情:

  • 使用 FluentAPI 而不是 FieldType 实体上的属性 - 没有变化
  • 直接使用 Context 对象 - 这非常有效,实体被添加到数据库并正确地相互引用,不幸的是这违背了存储库模式的目的
  • 将存储库用于非自引用实体 - 效果很好
  • 将 EF5 用于 .NET 4.0 和 .NET 4.5 - 结果相同

我的代码:

字段类型.cs

UnitOfWork.cs

上下文.cs

存储库.cs

SecurityController.cs(或任何类)

0 投票
1 回答
1715 浏览

python - Django中的反向自引用外键

对不起,如果这是一个愚蠢的问题,但我有点 Django 新手,找不到答案。

我有一个带有自引用字段的 Order 模型:

虽然如果我有一个订单并且我想知道它的来源,这可以正常工作,但我还需要获取一个订单的“子”列表 - 即,该订单是其来源的订单列表。这需要通过filter()s 来完成,还是有一个不错的 Django-y 方式来做到这一点?

0 投票
3 回答
1013 浏览

orm - Kohana 3.3 ORM - 如何在树中找到所有祖先(自引用表)

如何使用以下模型查找记录的所有祖先(不仅是直接父):

$category->parent->find() 仅给出直接父级,即使尝试使用递归函数获取父级的父级时,它也会抛出 Kohana_Exception: Method find() cannot be called on loaded objects。

这对我来说很自然,我想必须有一种简单的方法来做到这一点——我不确定是我自己还是缺乏关于 ORM 关系的文档——停!

0 投票
3 回答
152 浏览

php - mysql - php - 只需要从自引用数据中获取最新记录

在此处输入图像描述

嗨,我需要一些关于 SQL 的帮助。附上我的桌子的图像。

如果您看到 rootmessageid 列,则有 4 条 99 记录。所有这些 4 构成了一个完整的对话。

类似地,119 的 2 条记录进行了另一个对话。

116、117、118 是单消息会话。

现在我需要获取 msgfrom = 7 或 msgto = 7 的所有记录(这是最简单的部分)

现在复杂一点。我想要每个对话中唯一的最新记录(基于 datetimecreated)。

按照脚本创建此表。

0 投票
1 回答
482 浏览

hibernate - Hibernate 中带有附加列的自引用实体

我想用 Hibernate 映射这些表:

我想知道映射这个的正确方法。我想过这个:

用户实体

友谊实体

但我认为这与上面的模式不匹配(不仅在列名中,而且在 tbl 计数中,模式需要 2 个,但这需要 3 个映射到的表,2 个实体和 1 个用于 ManyToMany 关系映射表)。问题是我无法将其映射为 2 次

因为那样我将无法重定向用户的友谊,因为我不能添加类似的东西

给用户,因为我无法指定 mappedBy=? 论点,因此关系将映射到一个附加表中......

但我想保持它是双向的。

这个问题有什么好的解决方案吗?

此外,用户在友谊表中的排序方式无关紧要,因此 (user1, user2) = (user2, user1)。我认为这最好用具有等效 equals() 实现的 idClass/EmbeddedId 来表达,对吧?

编辑:如果你在 2 个元素上定义了一些顺序,比如 from<->to,owner<->owned,这似乎是可能的,但我在这种关系中看不到任何自然顺序,我不想为这个技术问题定义一些人造的东西......

0 投票
3 回答
504 浏览

performance - 为自引用表创建测试负载

我必须做一些 SQL Server 2008 R2 性能测试,如果只使用 SSMS 和 SQL Server 来做这件事,而不需要额外的应用程序支持,那将非常方便。

我必须做的一项测试是查询具有未知内容的自引用表(树状结构)。因此,首先,我必须将类似 100K - 1M 的随机父子相关行加载到此表中。

我目前正在尝试使用 SSMS 和此脚本将 10K 行加载到表中:

我的问题是它在我的笔记本电脑上运行类似于 2m 45s。您可以想象以这种方式加载 100K 甚至 1M 记录需要多长时间。

我想有一种更快的方法来使用 TSQL 将这种随机树状结构加载到数据库表中?

编辑: 根据 Mitch Wheat 的建议,我替换了

关于随机行选择,结果看起来确实是均匀分布的。执行时间从 160 秒下降到 5 秒(!)-> 这使我能够在 60 秒内插入 10 万条记录。但是,使用我的 RBAR 脚本插入 1M 记录仍然很慢,我仍在寻找可能的基于集合的表达式来填充我的表。如果存在。

现在,在填充随机数据约 10 分钟后,我有 1M 行。它很慢但可以接受。但是,要使用批量插入将此数据复制到另一个表,需要 <10 秒。

所以,我相信某种形式的批量插入可以加快这个过程。

0 投票
1 回答
53 浏览

mysql - Mysql:更新以创建一组访问条目,间隔不超过 maxmium 分钟

我有以下记录用户访问时间的mysql表:

在此处输入图像描述

我想更新 visit_id 以便“访问”是同一用户的一组条目,其中没有条目在前一个之后超过 20 分钟,并且每个条目的 visit_id 是该访问的第一个条目的 visit_id .

我希望这个例子有助于说明清楚。更新后,上面的示例表应该变成:

在此处输入图像描述

如果上一个条目发生在不到 20 分钟之前,我可以创建一个更新,将 visit_id 设置为该用户的上一个条目的 visit_id。

但是我无法解决如何创建仅 sql 更新来处理“级联”效应,换句话说,visit_id 需要找到该 user_id 的最早条目,该条目发生在 20 分钟的间隙之前。它可能是那个条目的 visit_id(如果它是那个访问的第一个),或者是前一个条目的 visit_id,或者是前一个前一个条目,或者前一个前一个前一个前一个条目,等等。

我怎么能写这个更新?

0 投票
2 回答
79 浏览

sql - 自引用表 - 如何将结果作为一张表

我有一张这样的桌子

在此处输入图像描述

请原谅它们由内部标准驱动的列名。我想知道的是如何查询这个自引用表,所以输出是这样的:

非常感谢您的帮助。

0 投票
1 回答
201 浏览

sql - 具有相同结构和相似数据的表

这确实是一个关于最佳实践的问题。
我正在开发一个系统,我将在其中收集一些测量值(称为 HR 和 RR)并计算这些测量值的平均值。现在对于用户界面,我们只对这些平均值感兴趣,但对于稍后深入的数据分析,我们需要所有单独的测量(导出到 matlab)以及所有平均计算(不要问 - 用户要求,如果需要,我只会保存单个测量值并在以后计算平均值)。

以下是有关平均计算等的详细信息:
- HR:我们每 500 - 1500 毫秒(可变)获取一次读数。我们根据 4-12 个读数计算平均值(取决于读数之间的时间)。
- RR:我们每 3-17 秒(可变)获得一次读数。我们根据 2-3 个读数计算平均值(取决于读数之间的时间)。

对于这两者,我们保存:
- 平均值(十进制)以及来自用于平均计算的读数的第一次读数的时间戳。
- 每个单独的读数(十进制)连同读数时的时间戳。

如您所见,平均计算和单个读数的数据相同。与 HR/RR 相同 - 数据相同,可以表示为:
- - - - - - - - -
| 阅读 |
- - - - - - - - - -
| 时间戳 |
| 价值 |
- - - - - - - - - -

由于我们以不同的时间间隔计算数据等,我们不能将 HR+RR 作为单行存储在数据库中,我们需要单独的行或表。
问题是:
1. 为 HR 和 RR 创建单独的表是否更好?还是将它们作为单独的行存储在同一个表中更好,用一列指示给定行是 HR 还是 RR?
2. 为每个单独的读数创建单独的表格更好吗?还是创建自引用表更好,其中每个单独的读数将引用同一个表中的一行,并使用它的平均计算?

我对数据库设计不是很好,我不确定在这种情况下使用的最佳实践是什么。
我也在考虑使用 MongoDB(而不是 SQL 数据库——可能是 MSSQL,因为该项目是基于 C# 的),这可能会使生活更轻松,因为我可以将一系列单独的测量值嵌入到具有平均计算等的文档中。就我而言知道写入 Mongo 的速度非常快......

任何指针?谢谢。