哪个是我导航的最佳数据库架构?

时间:2008-09-11 16:01:04

标签: .net sql database linq-to-sql database-design

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

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

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

页面显示HTML内容或execute programming。有些页面可能是子树的根(备用主页和样式表)。

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

我有三个想法:

  1. 许多轻量级表几乎都有 零nullalbe字段。

    #1 Many lightweight tables with almost zero nullalbe fields

  2. 重量级节点表有很多 nullalbe fields。

    #2 Heavyweight Node table with lots of nullalbe fields

  3. 最佳(或最差)两者:很多 nullalbe许多外国钥匙 轻量级表。

    #3 Lots of nullalbe foreign keys to many lightweight tables

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

    如何在数据库中保留数据完整性规则?我如何在编程中最好地执行它们?

    • 节点必须是(但不是两者) 链接或页面。

    • 页面必须是(但不是两者)html或代码。

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

    我可以使用这样的结构创建ASP.NET站点地图提供程序吗?我应该吗?


    更新:我问了一个更普遍的问题:

    What’s the best way to handle one-to-one relationships in SQL?


    相关问题:
    How do I enforce data integrity rules in my database?

3 个答案:

答案 0 :(得分:3)

在阅读您的帖子后,我的初步印象是,我非常反对让任何一种技术(在这种情况下为linq)严重影响数据库架构设计,达到您似乎建议的程度。

我认为您的架构应该几乎相同,无论您选择何种技术来构建业务/表示层。

我希望我没有误解你。

答案 1 :(得分:2)

我同意Linq的设计是低音的。 Joe Celko的书"Trees and Hierarchies in SQL For Smarties"对于模式来说有很多很好的想法来表示你想要做的事情。 Linq应该能够处理这些问题。

答案 2 :(得分:0)

结帐this article。它讨论了如何在数据库中存储树结构,并提供了一些很好的示例代码来帮助您入门。

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

希望这有帮助。