警告
我想添加一个免责声明来警告这个数据库结构。我强烈建议采用更精简的方法。
我个人的偏好是使用分层的一或二表结构来存储导航菜单。有关从平面结构建立菜单的指南,请参阅https://stackoverflow.com/a/444303/1778606
回答
就我而言,答案是在客户端缓存菜单。如果您愿意,请继续阅读。
我有一个使用多个查询生成的三层菜单。在我继承的应用程序中,有很多用户组。每个用户都可以通过用户组访问 Web 应用程序的不同页面/部分。单个用户可能在许多用户组中。
在他们的菜单中,每个用户应该只能看到和访问他们的组有权访问的页面。IE。每个用户只能看到某些菜单项、菜单子菜单部分和菜单子菜单部分项。数据透视表控制可见性和访问。
要生成菜单,我需要进行几个查询。我建议的菜单设计示例如下所示。
根据用户可以访问的第 1 层、第 2 层或第 3 层项目,此菜单看起来完全不同。
在会话中为每个用户缓存整个菜单而不是为每个页面加载生成它是否合适?这可能会缓存很多数据吗?我主要担心的是它会为会话中的每个活动用户缓存所有三个表(Tier1、Tier2、Tier3)。无论如何,我都需要访问数据以查看用户是否具有权限,但是嗯!
是否有任何架构设计可以帮助减少生成菜单所需的查询数量?(假设菜单是在每个页面加载时生成的,就像我开始写这个问题时所假设的那样正常工作)
这种菜单在应用程序中是否正常 - 我们有 20 个组,用户分布在 2 到 20 个之间?欢迎任何建议或意见。
(我想尽量减少页面加载和处理时间。)
上下文:我正在使用 c#、asp.net mvc3、oracle。最大用户群估计约为 20,000。最大活跃用户群接近 1000。可能的活跃用户群为 100。