【发布时间】:2014-06-03 07:40:24
【问题描述】:
我想创建一个具有多个级别的数据库驱动菜单,但我不确定设计数据库表的最佳做法是什么。我做了一些搜索,但找不到太多相关信息。
最初,我想为每个级别创建一个表。例如,父级菜单将只是dbo.Menu,而直接子级菜单项位于dbo.SubMenu。话虽如此,我为dbo.Menu 设想了以下设计:
但是,当我开始填充此表时,我意识到该站点将包含一些深度为 3 的项目,并且以后有可能添加更多级别。
有设计动态菜单的最佳做法吗?我应该有一个包含所有菜单项的表,还是应该将菜单项分成多个表?
【问题讨论】:
-
我会不为每个级别创建一个表 - 使用结构来实现多重性,它不适合 RA。不管是表还是列。搜索以下术语:“父子关系”、“物化路径”、“嵌套集”和“层次 ID”,以了解如何/从何处开始。
-
FWIW(因为看起来您正在使用 SMSS/SQL Server),我目前最喜欢的方法是使用自动构建的 Hierarchy ID(“物化路径”的一种形式)邻接列表(“父子”)。
-
太棒了。我正在使用 Hierarchy ID 数据类型创建菜单表,我很惊讶我以前从未听说过它。很酷!现在,我手动插入层次结构 ID,例如插入
CAST('/1/2/' AS HierarchyID)。我将不得不考虑从邻接列表中自动建立这种关系。谢谢!
标签: sql database-design hierarchy