具有层次结构或多个表的表?

时间:2013-09-10 09:37:31

标签: database database-design

我正在为某些应用程序设计数据库模型,我有一个属于某个类别的表Post。好的,Category逻辑上是其他表。

但是,更多类别属于某个超级类别或域或区域,我的问题是下一个:

是为超级类别或域创建其他表,还是在表Category中使用某些键组合指向父级来执行此层次结构。

我希望我对问题很清楚?

PS。我知道我可以用这两个解决方案解决这个问题,但是使用第一个超过第二个解决方案有什么好处,相反。

由于

1 个答案:

答案 0 :(得分:3)

这取决于:如果几乎每个类别都有父类,则可以将父序列添加为列。那么你的category表格就像

+--+----+------+
|ID|Name|Parent|
+--+----+------+

这种表示的问题在于,只要层次结构不是循环的,某些类别就没有父级。此外,一个类别只能有一个父母。

因此我建议使用category_hierarchy表。附表:

+-----+------+
|Child|Parent|
+-----+------+

这种方法的缺点是几乎每个category都会重复。因此,如果几乎所有类别都有父母,那么冗余将大致与该数字一致。如果关系相当稀疏,则可以节省空间。此外,使用智能连接将防止第二个表示花费很长的执行时间。例如,您可以定义一个视图来处理此类请求。

此外,在某些情况下,第二种方法可以提高速度。例如,如果您不需要层次结构(例如,将序列号映射到类别名称时),category表中的查找可能会更快,因为表格更紧凑,因此更多部件该表格将被缓存。