如何设计多级数据库驱动的菜单?

时间:2014-04-18 18:39:37

标签: sql database-design hierarchy

我想创建一个具有多个级别的数据库驱动菜单,但我不确定在设计数据库表时最佳做法是什么。我已经做了一些搜索,但找不到相关信息。

最初,我曾想过为每个级别创建一个表。例如,父级菜单只是dbo.Menu,其中直接子菜单项位于dbo.SubMenu中。话虽如此,我设想dbo.Menu的以下设计:

enter image description here

然而,一旦我开始填充此表,我意识到该网站将有一些深度为3的项目,并且有可能在以后添加更多级别。

设计动态菜单有最佳做法吗?我应该有一个包含所有菜单项的表,还是应该将菜单项分成多个表?

1 个答案:

答案 0 :(得分:4)

使用单个表来保存所有级别。您可以通过添加ParentMenuId列(NULLABLE)来执行此操作,该列将引用MenuId(同一个表)。顶级菜单项将具有ParentMenuId = NULL。

这种类型的实现在其他环境中可能看起来很复杂,但它在这里非常理想,您一次只能访问一个子菜单。