Каскадирование изменений
| Индекс материала |
|---|
| Каскадирование изменений |
| Страница 2 |
Иногда изменения содержимого записи должны отражаться на связанных данных. Например, удалив заказ, вы, возможно, захотите удалить и входившие в него товары. Различные СУБД по-разному разруливают данную ситуацию. Ограничение FOREIGN KEY в таблице Order Details БД Northwind SQL Server гарантирует, что пользователь не сможет удалить из таблицы Orders запись, связанную с записями таблицы Order Details. В SQL Server 2000 реализована поддержка каскадных изменений на основе ограничения FOREIGN KEY. Определяя ограничения FOREIGN KEY вы можете быть уверены, что при обновлении или удалении записи изменения автоматически каскадируются в записи связанной таблицы.
На рис. 7-6 показано диалоговое окно SQL Server 2000 для настройки параметров ограничения FOREIGN KEY. Объект ForeignKeyConstraint модели ADO. NET обладает аналогичными возможностями.
Он предоставляет свойства DeleteRule и UpdateRule, определяющие, что произойдет при изменении данных записи родительской таблицы, на которой определено ограничение FOREIGN KEY. Свойства DeleteRule и UpdateRule объекта ForeignKeyConstraint Свойства DeleteRule и UpdateRule принимают значения из перечисления Rule, относящегося к пространству имен SystemData. Значение обоих этих свойств по умолчанию — Cascade, т. е. при удалении записи родительского объекта DataTable также удаляются дочерние записи связанного объекта DataTable. Если вы измените значение поля в родительском объекте DataTable, на котором определено ограничение FOREIGN KEY (например, измените значение поля CustomerlD объекта DataTable Customers), это значение также обновится и в связанных записях дочернего объекта DataTable, Другие возможные значения свойств DeleteRule и UpdateRule — None, SetDefault и SetNutt. Если значение свойства DeleteRule — None, связанные данные из дочернего объекта DataTable не удаляются.
Если нужно изменить родительскую запись и задать одному из задействованных в ограничении полей значение NULL, задайте свойству DeleteRule и/или свойству UpdateRule значение NULL. Точно так же, если задать этим свойствам значение SelDefault, полям дочерней записи, задействованным в ограничении FOREIGN KEY, будет задано значение свойства Default. Постепенный отказ от соединяющих запросов Многие разработчики получают данные из нескольких таблиц при помощи соединяющих запросов.
Конечно, вы имеете право поместить результаты запроса, возвращающего данные нескольких таблиц, в объект DataTable, но обычно я не рекомендую этот способ. Как рассказывается в главе 10, объект DataAdapter предназначен для просмотра изменений, хранящихся в отдельном объекте DataTable и передачи их в конкретную таблицу вашей БД. Таким образом, для изменения содержимого объектов DataTable данные следует поместить в отдельные объекты DataTable, соответствующие таблицам БД. И что же нам делать с соединяющими запросами? Простейшее решение — разделить их на запросы, возвращающие данные отдельных таблиц. Тем не менее чаще легче это сказать, чем сделать.
Основы работы с Microsoft ADO.NET
Использование поставщика данных .NET
Метео


