У меня есть следующие таблицы в базе данных CMS (SQL Server 2008) для веб-сайта:
SiteMap Page Link
========= ========= =========
SiteMapId PageId LinkId
LeftNode Name Name
RightNode UrlId Url
-- etc -- -- etc --
- Таблица Sitemap содержит иерархию веб-сайтов, использующую модель вложенного набора , используемую главным образом для создания навигации по веб-сайту.
- Таблица страниц содержит данные для страниц, обслуживаемых системой CMS.
- Таблица ссылок содержит URL-адреса, которые отображаются в навигации сайта, но не обслуживаются CMS (например, внешние ссылки на другие сайты).
Каждая строка SiteMap должна ссылаться на одну строку в таблице Page или в таблице ссылок, и в этом заключается проблема. Какой лучший способ?
- Добавление внешнего ключа SiteMapId к таблицам Page и Link - недостаток: позволяет ссылаться на одну и ту же строку SiteMap более чем одной записью (в обеих таблицах).
- Добавление столбцов PageId и LinkId в таблицу SiteMap - недостаток: один столбец будет избыточным, поскольку он всегда будет содержать ноль или 0.
- Добавьте столбец PageOrLinkId в таблицу SiteMap и столбец битового поля, чтобы пометить его как содержащий PageId или LinkId - недостаток: невозможно добавить ограничения к отношениям, чтобы они содержали действительные значения.
Может кто-нибудь предложить, что из вышеперечисленного мне следует использовать, или придумать лучший вариант? Спасибо.