我正在为某些应用程序设计数据库模型,并且我有一个Post
属于某个类别的表。好的,Category
逻辑上将是其他表。
但是,更多的类别属于某个超级类别或领域或领域,我的问题是下一个:
是否为超级类别或域创建其他表,或者在表中Category
使用一些键组合来执行此层次结构以指向父级。
我希望我清楚问题?
PS.我知道我可以用这两种解决方案来解决这个问题,但是使用第一个解决方案而不是第二个解决方案有什么好处,相反。
谢谢
我正在为某些应用程序设计数据库模型,并且我有一个Post
属于某个类别的表。好的,Category
逻辑上将是其他表。
但是,更多的类别属于某个超级类别或领域或领域,我的问题是下一个:
是否为超级类别或域创建其他表,或者在表中Category
使用一些键组合来执行此层次结构以指向父级。
我希望我清楚问题?
PS.我知道我可以用这两种解决方案来解决这个问题,但是使用第一个解决方案而不是第二个解决方案有什么好处,相反。
谢谢
这取决于:如果几乎每个类别都有父级,您可以将父级序列添加为列。然后你的category
桌子看起来像
+--+----+------+
|ID|Name|Parent|
+--+----+------+
这种表示的问题在于,只要层次结构不是循环的,一些类别就没有父类别。此外,一个类别只能有一个父级。
因此,我建议使用一张category_hierarchy
桌子。附加表:
+-----+------+
|Child|Parent|
+-----+------+
这种方法的缺点是几乎每个category
都会重复。因此,如果几乎所有类别都有父类别,则冗余将大致随着该数量而扩展。但是,如果关系非常稀疏,则可以节省空间。此外,使用智能连接将防止第二个表示占用较长的执行时间。例如,您可以定义一个视图来处理此类请求。
此外,在某些情况下,第二种方法可以提高速度。例如,如果您并不总是需要层次结构(例如将序列映射到类别名称时),那么在category
表中查找会更快,这仅仅是因为表更紧凑,因此表的更多部分将是缓存。