如何优化/规范化平面sql表

时间:2018-01-21 21:53:03

标签: mysql sql hierarchical-data

我得到了这个平面表,我试图弄清楚它是否在前三种正常形式中,如果我能以某种方式优化它以便于使用。

parent_id | child_id  
        1 | 1    
        1 | 2  
        1 | 3  
        2 | 4  
        3 | 7  
        3 | 9  
        9 | 10  

那么我在这里关注的是什么......我重复这些值,基本上是嵌套的层次结构。当我在这个表上执行查询时, 我需要在我的应用程序代码中对数据进行分组。反正是吗 组织这些数据,以便我可以将其用于树形显示, 只是通过执行SQL查询?考虑到规范化,这个表有什么问题吗?

这是所需的输出(见下图,这是一个例子)。我正在使用MySQL。

树状结构

enter image description here

1 个答案:

答案 0 :(得分:0)

第三种常规形式总是足以满足我的数据需求,并且无处不在,以至于当我们说"标准化数据"我们假设我们的意思是第3范式。我唯一有意识地看到非标准化数据的情况非常有限,特定情况。

您的parent_idchild_id表可以有效地使您的数据正常化。我假设这些列是相应表中的主键。

首先,上面称为连接表,因为它的目的是:链接nn关系中的行,即1-many,many-many等。

如果没有连接表,那么您需要为链接的每个子行设置父表列。如果需要从关系的子端查询,则同样为子表。这是非标准化数据的情况。这显然是不切实际的。

然后在查询中使用连接表来获取相关数据。

select pt.a, ct.b
from parentTable pt
join myJoinTable jt on pt.id = jt.parent_id
join childTable ct on jt.child_id = ct.id
order by jt.parent_id, jt.child_id

您可能希望order by主键

相关问题