我得到了这个平面表,我试图弄清楚它是否在前三种正常形式中,如果我能以某种方式优化它以便于使用。
parent_id | child_id
1 | 1
1 | 2
1 | 3
2 | 4
3 | 7
3 | 9
9 | 10
那么我在这里关注的是什么......我重复这些值,基本上是嵌套的层次结构。当我在这个表上执行查询时, 我需要在我的应用程序代码中对数据进行分组。反正是吗 组织这些数据,以便我可以将其用于树形显示, 只是通过执行SQL查询?考虑到规范化,这个表有什么问题吗?
这是所需的输出(见下图,这是一个例子)。我正在使用MySQL。
树状结构
答案 0 :(得分:0)
第三种常规形式总是足以满足我的数据需求,并且无处不在,以至于当我们说"标准化数据"我们假设我们的意思是第3范式。我唯一有意识地看到非标准化数据的情况非常有限,特定情况。
您的parent_id
,child_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
主键