gpt4 book ai didi

MySQL 追踪分层一对多数据结构的祖先

转载 作者:行者123 更新时间:2023-11-29 13:03:23 25 4
gpt4 key购买 nike

如果你有 3 张 table 。 A表中的一条记录与B表中的许多记录相关。B表中的一条记录与C表中的许多表相关。

现在给定表 C 中的一行 id,如果我不了解表 B,如何追溯到表 A 中的原始祖先行?

目标是查明特定行是否由表 A 内的实体“拥有”。实际情况是,表 A 和表 C 之间可能存在多个一对多的级别。

最佳答案

以下是我可以考虑的 3 个选择:

1) 表 C 中有一个列保存表 A 的引用。这涉及一些非规范化,但它很有效。

因此您将拥有一个类似于表 A (id, ....)、表 B(id, a_id, ...)、表 C(id, a_id, b_id, ...) 的架构

2) 跟踪表 C 中的表 B 的名称:这样您将拥有类似表 C(id,parent_object_table,parent_object_id, ...) 的内容,这将允许您恢复父级的表名称和行 ID

3) 如果这些表具有相同的结构(例如菜单、子菜单),最好只使用一个表,并使用一个 Parent_id 列来跟踪直接父级,以及一个可选的深度列来了解如何进行操作该行位于树的最下方

编辑

好吧,如果我理解正确的话,你想构建一个动态树结构。

尝试这样的事情:

表树

id
object_table
object_id
parent_object_table
parent_object_id
depth

因此,具有(id:15,table_b父级:12,table_a父级:3)的table_c记录将有2条记录:

object_table = 'table_c'
object_id = 15
parent_object_table = 'table_b'
parent_object_id = 12
depth = 1

object_table = 'table_c'
object_id = 15
parent_object_table = 'table_a'
parent_object_id = 3
depth = 2

您还可以根据您的用例添加另一条记录,这将允许您的所有记录都出现在该表中(并且可能更加隐式)。

object_table = 'table_c'
object_id = 15
parent_object_table = 'table_c'
parent_object_id = 15
depth = 0

这将允许没有父项的行也出现在该表中

关于MySQL 追踪分层一对多数据结构的祖先,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23041064/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com