Ссылочная целостность и каскадные воздействия


Дата добавления: 2014-11-24 | Просмотров: 1609


<== предыдущая страница | Следующая страница ==>

Рассмотрим наиболее часто встречающуюся в базах данных связь "один-ко-многим" (рис. 3). Как можно заметить, дочерняя и родительская таблицы связаны между собой по общему полю "Товар", это поле называется полем связи.

Рис.3 - связь "один-ко-многим"

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

 

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

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

 

Рассмотрим первый случай. На рис. 4 показано изменение значения поля "Товар" с "Сахар" на "Рафинад" в таблице "Товары". В таблице "Отпуск товаров" значение поля связи "Сахар" осталось прежним. В результате: в дочерней таблице "Отпуск товаров" для товара "Рафинад" (таблица "Товары") нет сведений о его отпуске со склада; некоторые записи таблицы "Отпуск товаров" содержат сведения об отпуске товара ("Сахар"), о котором нет информации в таблице "Товары".

 

Рис. 4 - Нарушение целостности базы данных - записи с товаром "Сахар " (таблица "Отпуск товаров") не имеют родительской записи

 

Рассмотрим второй случай. Пусть в одной из записей таблицы "Отпуск товаров" значение поля связи "Сахар" изменилось на "Рафинад" (рис. 5). В результате: в дочерней таблице "Отпуск товаров" недостоверны сведения об отпуске со склада товара "Сахар" (таблица "Товары"); одна из записей таблицы "Отпуск товаров" содержит данные об отпуске товара ("Рафинад"), сведения о котором (такие, как единица измерения и цена за единицу) отсутствуют в таблице "Товары".

И в первом, и втором случаях наблюдается нарушение целостности базыданных, поскольку информация в ней становится недостоверной. Т.е., нужно блокировать действия, которые нарушают целостность связей между таблицами, которую называют ссылочной целостностью.Ссылочная целостность - это свойство совокупности связей между отдельными таблицами во всей БД. Нарушение хотя бы одной такой связи делает информацию в БД недостоверной.

 

 

Рис. 5 - Нарушение целостности базы данных - запись с товаром "Рафинад" (таблица "Отпуск товаров") не имеет родительской записи

 

Чтобы предотвратить потерю ссылочной целостности, используется механизм каскадных изменений.Он состоит в обеспечении следующих требований:

1) необходимо запретить изменение поля связи в записи дочерней таблицы без синхронного изменения полей связи в родительской и дочерней таблицах; обычно инициатива изменения поля связи реализуется в записи родительской таблицы;

2) при изменении поля связи в записи родительской таблице, следует синхронно изменить значения полей связи в соответствующих записях дочерней таблицы;

3) при удалении записи в родительской таблице, следует удалить соответствующие записи в дочерней таблице.

 

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

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

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

Каскадные изменения могут блокироваться: или одновременно изменения и удаления, или изменения или удаления по отдельности. Необходимость разрешения или запрещения каскадных изменений обычно реализуется в СУБД при определении связей между таблицами: таким образом и происходит создание ссылочной целостности. Обычно в СУБД для реализации ссылочной целостности в дочерней таблице создают внешний ключ, ссылающийся на родительскую таблицу, и указывают вид каскадных воздействий. В последующем СУБД сама при необходимости реализует каскадные воздействия данного вида для указанных таблиц.

Целостность данных – согласованность данных между связанными таблицами в реляционных базах данных.

 

Механизм поддержки целостности данных обеспечивает выполнение работы с данными с учетом следующих правил:

 

  1. Невозможно ввести в связанное поле подчиненной таблицы значение, которое отсутствует в связанном поле главной таблицы.
  2. Не допускается удаление записи из главной таблицы, если существуют связанные с ней записи в подчиненной таблице.
  3. Невозможно изменить значение ключевого поля в главной таблице, если существуют записи, связанные с данной таблицей.

 

 

Контрольные вопросы

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

2. Для чего необходимо поле связи?

3. Чем характерна ссылочная целостность?

4. Создайте базу данных «Студенты», и покажите на ней два примера нарушения целостности баз данных.

5. Что такое механизм «каскадного изменения»? Для чего он используется и чем характерен?

6. Какие существуют виды «каскадного удаления»? Для чего они необходимы?

7. Какие правила должен учитывать механизм поддержки целостности данных?

 

 

РАЗДЕЛ 3

Структурированный язык запросов SQL

САМОСТОЯТЕЛЬНАЯ РАБОТА №9 (12 часов)

ТЕМА:Структурированный язык запросов SQL.Манипулирование реляционными данными

Язык структурированных запросов SQL (Structured Query Language) предназначен для создания и работы с реляционными базами данных (БД).

Реляционная БД - это информация, хранимая в ЭВМ в виде двух­мерных таблиц. Данные из таблиц могут связываться между собой. В об­щем случае возможны три типа связи: один к одному, один ко многим и многие ко многим. Каждый столбец таблицы (называемый также полем или атрибутом данных) должен иметь уникальное имя в пределах своей таблицы. Порядок строк (называемых также кортежами) в таблице несу­щественен. Однако для идентификации данных в таблице некоторый столбец (или группа столбцов) должны иметь уникальное значение. Такой столбец (столбцы) называется ключевым (первичным ключом).

Сам по себе SQL не является ни системой управления БД (СУБД), ни отдельным программным продуктом. SQL - это часть СУБД, инстру­мент, с помощью которого осуществляется связь пользователя с ней.

Первый международный стандарт языка SQL был принят в 1989 г. (SQL/89). В конце 1992 г. был принят новый международный стандарт языка SQL (SQL/92). И он не лишен недостатков, но в то же время являет­ся существенно более точным и полным, чем SQL/89. SQL/92 не только восполняет недостатки SQL/89, но содержит также много новых свойств.

Термин “стандартный SQL” в последующем тексте подразумевает, что описываются свойства языка, которые определены в SQL/89 или SQL/92. Если некоторые свойства языка реализованы во многих СУБД но не определены в SQL/89 или SQL/92, следует специальное указание на это.

Большинство примеров в работе используют БД,состоящую из трехтаблиц: Заказчики, Продавцы и Заказы.

Таблица Заказчики включает следующие поля: Номер_заказчика, Фамилия_заказчика, Город, Рейтинг, Номер_продавца.

Таблица Продавцы включает следующие поля: Номер_продавца, Фамилия_продавца, Город, Комиссионные.

Таблица Заказы включает следующие поля: Номер_заказа, Дата_заказа. Сумма, Номер_продавца, Номер_заказчика.

 


1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 |

При использовании материала ссылка на сайт Конспекта.Нет обязательна! (0.051 сек.)