¿Cuál es el mejor esquema de database para mi navigation?

Estoy creando un website donde todas las páginas cuelgan de una jerarquía de tree basada en bases de datos.

Todos less uno nodo tiene un nodo padre. Los nodos pueden tener permissions de lectura basados ​​en roles. Algunos nodos pueden tener reglas especiales (como: no se muestran en los menus de navigation).

Los nodos pueden representar enlaces a otros nodos (como un acceso directo en Windows). Los nodos suelen representar páginas.

Las páginas presentan contenido HTML o ejecutan progtwigción . Algunas páginas pueden ser raíces de subtreees (páginas maestras alternativas y hojas de estilo).

Ayúdeme a configurar mi database de nodos en Microsoft SQL Server para que Linq lo use en SQL.

Tengo tres ideas:

  1. Muchas tablas livianas con campos nullalbe casi nulos.

    # 1 Muchas tablas ligeras con casi nullalbe campos http://img126.imageshack.us/img126/2016/scan1ro8.gif

  2. Mesa de nodo pesado con muchos campos nullalbe.

    # 2 Tabla de nodos pesados ​​con muchos campos nullalbe http://img124.imageshack.us/img124/9909/scan2xm2.gif

  3. Lo mejor (o peor) de ambos: muchas keys externas nullalbe para muchas tablas livianas.

    # 3 Un montón de keys externas nullalbe para muchas tablas livianas http://img124.imageshack.us/img124/1999/scan3wn8.gif

¿Cuál crees que representa mejor los datos? ¿Cuál será más fácil de usar con Linq a SQL?

¿Cómo puedo mantener mis reglas de integridad de datos dentro de la database? ¿Cómo puedo hacer que se cumplan dentro de mi progtwigción?

  • Los nodos deben ser (o no ambos) enlaces o páginas.

  • Las páginas deben ser (pero no ambas) html o código.

  • Los enlaces pueden no ser roots, html, ni code.

¿Puedo hacer que un proveedor de maps del sitio ASP.NET tenga esa estructura? ¿Debería?


Actualización: He hecho una pregunta más general:

¿Cuál es la mejor manera de manejar las relaciones uno a uno en SQL?


Pregunta relacionada:
¿Cómo hago cumplir las reglas de integridad de datos en mi database?

Mi printing inicial después de leer su publicación es que sería muy reacio a permitir que cualquier tecnología (en este caso, linq) influya mucho en el layout del esquema de la database en la medida en que parezca estar sugiriendo.

Creo que su esquema debería ser prácticamente el mismo, independientemente de la tecnología que elija para build sus capas de negocios / presentación.

Espero no haber entendido mal.

Estoy de acuerdo con que el layout con Linq en mente es muy bueno. El libro de Joe Celko "Árboles y jerarquías en SQL para Smarties" tiene muchas buenas ideas para que los esquemas representen lo que estás tratando de hacer. Linq debería ser capaz de lidiar con esto muy bien.

Mira este artículo . Habla de almacenar estructuras de tree en la database y proporciona un buen código de muestra para que comiences.

Este artículo no tiene nada que ver con LINQ, solo le ofrece una excelente manera de almacenar una estructura de tree en la database.

Espero que esto ayude.