Иллюстрированный самоучитель по Architecture .NET

Ограничения и связи

Каждый объект DataTable (Таблица данных) содержит коллекцию объектов DataRow. Каждый такой объект представляет строку таблицы. Добавление нового объекта DataRow влияет на ограничения объекта DataColumn (мы предполагаем, что свойство EnforceConstraints объекта DataSet (Набор данных) имеет значение true (истина)).

Первичные ключи

Существует несколько типов ограничений. Первичный ключ – уникальный ключ для строк таблицы. Другие ограничения единственности определяют единственность каждого значения в столбце (или столбцах). Внешний ключ используется для обозначения того, что значения в столбце являются первичными ключами для другой таблицы объекта DataSet (Набор данных). Первичный ключ объекта DataTable (Таблица данных) является свойством:

// Определить РК для таблицы BookCategories DataColumn *bookcategoriesPK [] =
new DataColumn*[2]; bookcategoriesPK[0] = en;
bookcategoriesPK[l] = loc; bookcategories › PrimaryKey = bookcategoriesPK;
// Определить РК для таблицы Authors (Авторы)
DataColumn *authorsPK [] =
new DataColumn*[1]; authorsPK[0] = auid;
authors › PrimaryKey = authorsPK; // авторы
// Определить РК для таблицы Books (Книги) DataColumn *booksPK [] =
new DataColumn*[1]; booksPK[0] = ISBN;
books › PrimaryKey = booksPK; // книги

Ограничения

Для работы со всеми ограничениями помимо первичных ключей используются абстрактный базовый класс Constraint (Ограничение) и его производные классы: UniqueConstraint и ForeignKeyConstraint. Базовый класс обеспечивает возможность помещения ограничения в коллекцию ограничений таблицы. Первичный ключ также регистрируется в этой коллекции как ограничение единственности с именем, генерируемым системой. Для определения, является ли ограничение первичным ключом, используется свойство UniqueConstraint::IsPrimaryKey.

Определим уникальность значений столбца Category таблицы Categories (Категории). Так как последний аргумент метода Add (Добавить) имеет значение false (ложь), это ограничение не будет первичным ключом таблицы. Для этой таблицы мы не определяем первичного ключа, а задаем только ограничения единственности. Вообще говоря, задавать ограничения для значений таблицы не обязательно. Хотя это и нарушает правила реляционной целостности, никто не заставляет вас использовать объект DataSet (Набор данных) реляционным способом.

// Определим ограничение единственности
// для таблицы Categories (Категории)
categones › Constraints › Add (// категории › Ограничениям › Добавить
"Unique CategoryName Constraint",
// "Уникальное ограничение CategoryName ",
categoryname,
false); // ложь

При использовании внешнего ключа можно определить действия, которые следует выполнить при изменении первичного ключа, с которым он связан. Выбор здесь стандартен: None (Ничего), Cascade (Каскад), SetNull. Для установки значения, принимаемого по умолчанию для этого параметра (он описывается в свойстве DefaultValue объекта DataColumn), используется метод SetDefault. Эти параметры могут быть определены как для условий обновления, так и для условий удаления данных.

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.