Поддержание HierarchyID в актуальном состоянии - PullRequest
2 голосов
/ 23 ноября 2011

Я занимаюсь рефакторингом старой структуры базы данных страны / региона / местоположения в иерархическую таблицу.

Я собираюсь использовать первичный ключ новой таблицы и самоссылающийся столбец ParentID (включенпервичный ключ) в качестве основы для столбца иерархии.

поэтому моя таблица выглядит следующим образом:

PK Имя ParentID HierarchyID

1 World NULL /

2 UK 1/1 /

3 Wigan 2/1/2

Мой вопрос: какие методы были реализованы другими для поддержания актуальности столбцов иерархии при создании записи или родителязапись изменена?

Примечание;Я использую LINQtoSQL (я использую вычисляемый столбецierarchyid.ToString (), чтобы показать происхождение в коде, плюс хранимые процедуры, чтобы дать мне преимущество в производительности запросов к иерархии).

Для управления вставкой / обновлением:

Я рассмотрел возможность переопределения процедур вставки / обновления в LINQtoSQL для моей новой таблицы.

Я рассмотрел использование хранимых процедур для управления обновлением / вставкой новых записей.

Я рассмотрелрекурсивный триггер после вставки / обновления для выполнения обновления на основе ParentID.

Однако я не принял решение, какой курс выбрать!

Кто-нибудь использовал какой-либо из этих методов для управленияhierarchyids?Есть ли лучшие методы, которые я не рассматривал, или я упускаю что-то действительно очевидное !!?

1 Ответ

2 голосов
/ 23 ноября 2011

Я только недавно сделал похожий проект, где использовал хранимые процедуры для управления идентификаторами.LINQ хорош, если вы выполняете несколько простых запросов, но он создает трудности при отладке и обслуживании модели данных.

Хорошая сторона использования хранимой процедуры заключается в том, что она абстрагирует управление идентификаторами от уровня приложения., так что разработчику не нужно понимать базовую модель (ы) базы данных.С другой стороны, он абстрагирует управление идентификаторами от прикладного уровня, так что разработчик не может понять базовую модель (ы) базы данных без обращения к базе данных и просмотра сохраненного процесса.

Использованиетриггер базы данных, вероятно, будет лучшим решением, но я решил не делать этого просто потому, что это добавит еще один уровень абстракции.Это потому, что это еще больше запутывает истинный процесс обработки данных, оставляя другое место для поиска того, кто может пытаться выяснить, как все это работает.

Суть в том, что вам следует обеспечить ссылочную целостность вспособ, который согласован для всей вашей системы (или, по крайней мере, вашего проекта).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...