Возможны ли денормализованные обновления с помощью NHibernate без использования хранимой процедуры? - PullRequest
1 голос
/ 23 февраля 2009

Я размышляю об использовании NHibernate в проекте, в котором есть база данных с определенной степенью запланированной денормализации (запланированной администратором баз данных). Чтение из одного набора таблиц и сопоставление одного столбца с одним свойством не является проблемой. Однако при обновлении мне нужно будет сопоставить одно свойство с исходным столбцом в исходной таблице, а также обновить несколько копий этого столбца в денормализованных таблицах. Возможно ли это сделать с помощью NHibernate без использования хранимых процедур?

РЕДАКТИРОВАТЬ: Хотя я склонен согласиться с ответом NXC, этот вопрос о том, как решить проблему с NHibernate, а не решить ее в базе данных.

Ответы [ 2 ]

1 голос
/ 23 февраля 2009

Некоторые мысли о ненормализованных данных:

  • Используйте экономно; Известно, что чрезмерное использование денормализованных данных является источником проблем с обслуживанием и качеством данных. В одном проекте J2EE, в котором я принимал участие, было всего 4 денормализованных элемента данных в 560 таблицах - два из них были поисковыми таблицами.

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

  • Денормализованные данные оставляют слоновые ловушки для разработчиков обслуживания (особенно если вы не используете триггеры БД для обслуживания данных). Убедитесь, что каждая часть денормализованных данных задокументирована.

1 голос
/ 23 февраля 2009

Да, вы можете зарегистрировать прослушиватель событий, унаследованный от DefaultSaveOrUpdateEventListener, переопределить OnSaveOrUpdate и обновить другие объекты.

Вот несколько сообщений в блоге о слушателях событий:

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