关于.net:哪种导航最适合我的导航架构?

Which is the best database schema for my navigation?

我正在创建一个网站,其中所有页面都悬挂在数据库驱动的树层次结构中。

除一个节点外,所有节点都有一个父节点。节点可能具有基于角色的读取权限。一些节点可能有特殊的规则(例如:不显示在导航菜单中)。

节点可能表示到其他节点的链接(例如Windows中的快捷方式)。节点通常代表页面。

页面显示HTML内容或执行编程。某些页面可能是子树的根(备用母版页和样式表)。

请帮助我在Microsoft SQL Server中设置节点数据库,以供Linq to SQL使用。

我有三个想法:

  • 许多轻巧的桌子几乎
    零个nullalbe字段。

    #1 Many lightweight tables with almost zero nullalbe fields

  • 重量级节点表有很多
    nullalbe字段。

    #2 Heavyweight Node table with lots of nullalbe fields

  • 两者最佳(或最差):很多
    nullalbe许多的外键
    轻巧的桌子。

    #3 Lots of nullalbe foreign keys to many lightweight tables

  • 您觉得哪个最能代表数据? Linq to SQL最容易使用哪个?

    如何将数据完整性规则保留在数据库中?如何在编程中最好地实施它们?

    • 节点必须是其中一个(但不能同时是两个)
      链接或页面。

    • 页面必须是(但不能同时是)html或代码。

    • 链接可能不是root,html或代码。

    我可以使用这种结构来制作ASP.NET站点地图提供程序吗?我是不是该?

    更新:我问了一个更一般的问题:

    在SQL中处理一对一关系的最佳方法是什么?

    相关问题:
    如何在数据库中实施数据完整性规则?


    阅读您的文章后,我的第一印象是我不愿意让任何一种技术(在本例中为linq)在您似乎建议的范围内对数据库架构设计产生重大影响。

    我认为您的架构应该几乎相同,而不管您选择了哪种技术来构建业务/表示层。

    我希望我没有误会你。


    我同意在考虑Linq的情况下进行低音设计。 Joe Celko的书"用于Smarties的SQL中的树和层次结构"有许多关于模式的好主意,以表示您要执行的操作。 Linq应该能够处理这些问题。


    查看这篇文章。 它讨论了如何在数据库中存储树结构,并提供了一些不错的示例代码来帮助您入门。

    本文与LINQ无关,只是为您提供了一种在数据库中存储树结构的好方法。

    希望这可以帮助。


    推荐阅读