如果您说3张桌子。表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列来跟踪直接父级,并使用可选的depth列来知道下一级表的深度。树是行
编辑
好的,如果我对您的理解正确,那么您想构建一个动态树结构。
尝试这样的事情:
表树
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
这将使没有父母的行也可以在此表中
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句