问题标签 [transitive-closure-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.
sql - 如何在 fluent api 和 EF 中使用复合键构建自引用表
我正在构建一个带有“闭包表”的分层数据库来构建树它是一个自引用表,两个键应该成为主键。
问题是,当我期望只有 3 列时,我最终得到 5 列。
这是我尝试过的:
结果是一个包含 5 列的表:
- 任务 ID
- ChildId
- 长度
- Child_TaskId
- Child_ChildId
我期望:
- 任务 ID
- ChildId
- 长度
我猜想缺少一些流利的 api,但否则我无法开始工作?
sql - 如何使用邻接列表中的数据创建闭包表?
我有一个数据库,其中包含使用邻接列表模型存储的类别层次结构。
层次结构为 3 级深(不包括虚构的根节点),包含大约 1700 个节点。第 2 层和第 3 层的节点可以有多个父节点。一个附加表用于多对多关系,如下所示:
如果我转而使用传递闭包表方法(为了数据完整性等),是否可以执行一个相对简单的查询来生成闭包表的值?(使用 SQL Server 2005)
我已经浏览了诸如 Bill Karwin 的分层数据模型之类的文章和演示文稿,但它只包含针对单个节点的插入查询,而且我要花很长时间才能创建这样的树。
谢谢。
编辑:
CategoryHierarchy 表中的 RelID 纯粹是为了主键,它与 Category 表的节点 ID 无关。
同样通过闭包表,我的意思是这样的表:
其中前两列是复合主键,并且分别是 Category.id 的外键。
sql - 如何从闭包表中显示 HTML 中的树结构
我在 MySQL 中存储了一些分层数据。由于各种原因,我决定使用闭包表(而不是嵌套集、邻接表等)。到目前为止,它对我来说一直很好,但现在我正试图弄清楚如何在 HTML 中实际显示这棵树(即使用正确的缩进)。
举个例子,假设我有一棵这样的树......
- 食物
- 水果
- 苹果
- 梨
- 蔬菜
- 萝卜
- 水果
我的“食物”表看起来像这样......
我的“关闭”表将如下所示......
现在我想知道如何才能在 HTML 中正确显示它,最好是这样......
...这将以项目符号形式显示我的树,就像我的问题开始时一样。无论如何,任何帮助将不胜感激!
查尔斯
ruby-on-rails - Implementing version history with a closure table schema
I have a custom CMS implementation that stores content nodes in two tables as described in the "closure table" section at http://www.slideshare.net/billkarwin/models-for-hierarchical-data and using this gem https://github.com/mceachen/closure_tree under Ruby on Rails 3 and MySQL.
The time has come for me to implement a version history where any change in the content tree (editing, inserting, moving, deleting nodes, etc.) would create a new version of the root node (a publication). And users would be able to look at older versions and revert back to them. The revert action would create a newer version which is a copy of the reverted one.
Is there a well known way to achieve this? or does anyone have an idea or example implementation for this sort of thing?
Any input will be appreciated.
mysql - 对闭包表分层数据结构中的子树进行排序
我想请您帮助我解决存储为闭包表的分层数据结构的排序问题。
我想用这个结构来存储我的网站菜单。一切正常,但问题是我不知道如何按自定义顺序对确切的子树进行排序。目前,树按照项目添加到数据库的顺序进行排序。
我的结构基于Bill Karwin关于 Closure Tables 的文章和其他一些帖子。
这是我的 MySQL 数据库结构和一些 DEMO 数据:
这是我对一棵树的 SELECT 查询:
对于 __ROOT_ = 1 的 DEMO 实例,查询获得:
但是,如果我例如需要更改 Cat 1.1 和 Cat 1.2 的顺序(根据名称或某些自定义顺序)怎么办?
我看过一些面包屑解决方案(如何按面包屑排序),但我不知道如何生成和更改它们。
sql - 从传递闭包表中找到最小公共祖先
我有一个表表示组织层次结构的传递闭包(即,它是一个具有单个根的树):
我有另一个表,其中包含每个用户被允许访问的组织:
系统向用户显示与用户可以访问的每个组织相关的支出汇总。我总是可以首先向用户展示公司的视图(即根),向用户展示直接子组织的列表以及他的组织对总数的贡献。在大多数情况下,只有一个孩子,并且用户需要在看到多个孩子之前向下钻取几个级别。我更愿意从第一个显示多个孩子的组织(即 LCA)开始演示。
对于给定的用户,我可以很容易地找到到根目录的路径集,但在找到最不共同的祖先时遇到了麻烦。我正在使用 postgresql 9.1,但更喜欢与数据库无关的解决方案。在最坏的情况下,我可以将 root 的路径拉回到应用程序的代码中并在那里计算 LCA。
mysql - SQL查询在邻接表/闭包表中找到最终覆盖的ID
我有一个名为的邻接表(为了便于递归attribute
,它还有一个名为 mapped 的闭包表)。attribute_closure
表中的每个条目attribute
都是 4 种分层类型之一,每种类型都可以继承和覆盖其父类型的条目。按层次结构,四种可能的类型是category
、product_line
、product
、model
。所以category
定义了一个属性树,它继承并且可以在任何时候覆盖,product_line
等等。product
model
这是预先存在的应用程序的预先存在的结构,因此任何重组建议都是不可用的:-)
因此,邻接列表attribute
具有以下列:id, parent_id, overrides_id
,overrides_id
(如果设置)是对 的引用attribute.id
,对于 也是如此parent_id
。如果overrides_id
设置,parent_id
将始终匹配被覆盖属性的值parent_id
。
对于每个层次类型,都有一个将类型映射到属性的支持表,即 - category_id, attribute_id
。
我需要能够取回完整的属性树,并尊重所有覆盖。
示例数据(此特定示例仅涉及产品级别,但您明白了)。请根据需要使用您自己的示例数据进一步充实。
attribute
category_attribute
product_line_attribute
product_attribute
查询包含上述属性的树,应该只30955
返回属性 id,因为显示的其他 2 个属性应该在 30955 之前被废弃。
如前所述,我还有一个典型的闭包表,它映射出ancestor
, descendant
, level
. 如果您可以包含使用闭包返回具有覆盖已生效的树的结果,则额外加分。:-)
mysql - 并发编辑闭包树层次结构时的死锁
当使用closure_tree同时操作一组具有层次结构的公共属性的模型时,如何避免数据库死锁?
它们有以下几种口味:
发出时#append/prepend_sibling
重建闭包表时
with_advisory_lock看起来很有希望。有什么想法吗?
python - Django ORM 和闭包表
我正在尝试使用闭包表对组织为分层树的数据进行建模。表示树中节点的条目并不花哨,定义如下。
节点之间的路径使用以下闭包表定义。它由到祖先节点的 FK、到后代节点的 FK 以及祖先和后代之间的路径长度(即节点数)组成:
现在我将如何检索所有Region
行及其各自的父节点(即 RegionPath.PathLength = 1)?我的 SQL 有点生锈,但我认为 SQL 查询应该是这样的。
非常感谢使用 Django 的 QuerySet API 表达这一点的任何帮助。