我想创建一个具有多个级别的数据库驱动菜单,但我不确定在设计数据库表时最佳做法是什么。我已经做了一些搜索,但找不到相关信息。
最初,我曾想过为每个级别创建一个表。例如,父级菜单只是dbo.Menu
,其中直接子菜单项位于dbo.SubMenu
中。话虽如此,我设想dbo.Menu
的以下设计:
然而,一旦我开始填充此表,我意识到该网站将有一些深度为3的项目,并且有可能在以后添加更多级别。
设计动态菜单有最佳做法吗?我应该有一个包含所有菜单项的表,还是应该将菜单项分成多个表?
答案 0 :(得分:4)
使用单个表来保存所有级别。您可以通过添加ParentMenuId列(NULLABLE)来执行此操作,该列将引用MenuId(同一个表)。顶级菜单项将具有ParentMenuId = NULL。
这种类型的实现在其他环境中可能看起来很复杂,但它在这里非常理想,您一次只能访问一个子菜单。