Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Метод_пособие_СУБД.doc
Скачиваний:
5
Добавлен:
08.12.2018
Размер:
9.89 Mб
Скачать

Отношение «один-ко-многим»

Связь "один-ко-многим" является самой распространенной для реляционных баз данных. Она позволяет моделировать иерархические структуры данных. Различают две разновидности этой связи: в первом случае всякой записи в родительской таблице должны соответствовать записи в дочерней таблице, во втором случае некоторые записи в родительской таблице могут не иметь записей в дочерней таблице.

Пример отношения "один-ко-многим" приведен на рисунке 1.2.

Таблица «Товары» Таблица «Отпуск товаров»

Товар

Ед. изм.

Цена ед.

Товар

Дата

Кол-во (ед)

Сахар

Кг

12

Сахар

10.01.03

100

Макароны

Кг

10

Сахар

15.01.03

200

Куры

Кг

60

Сахар

12.02.03

50

Фанта

бут.1 л

15

Макароны

20.02.03

1000

Макароны

10.03.03

500

Фанта

09.01.03

2000

Рис. 1.2. Отношение "один-ко-многим

Отношение «многие-ко-многим»

Ниже приведены таблицы (смотри рисунок 1.3), состоящие в отношении "многие-ко-многим". В каждой учебной группе, как правило, ведут занятия несколько преподавателей. Каждый преподаватель может вести, во-первых, несколько разных предметов и, во-вторых, преподавать в разных группах.

Таблица «Группы» Таблица «Преподаватели и предметы»

Группа

предмета

предмета

ФИО

Предмет

Кафедра

1Ф1

10

10

Иванов В.В.

Информатика

ТИ-1

1Ф1

12

12

Иванов В.В.

Теория систем

ТИ-1

1Ф1

62

12

Петров П.П.

Теория систем

РИО

1У1

62

10

Васин И.И.

Информатика

ТИ-1

62

Лавров И.И.

Философия

ЭИ-1

Рис. 1.3. Отношение "многие-ко-многим

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

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

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

Рассмотрим первый случай. Заменим в таблице «Товары» в поле «Товар» «Сахар» на «Рафинад». В результате в дочерней таблице «Отпуск товаров» для поля «Рафинад» нет сведений об его отпуске со склада, а некоторые записи таблицы «Отпуск товаров» содержат сведения об отпуске товара «Сахар», о котором нет информации в таблице «Товары».

Рассмотрим второй случай. Заменим в одной из записей таблицы «Отпуск товаров» значение поля связи «Сахар» на «Рафинад». В результате в дочерней таблице «Отпуск товаров» недостоверны сведения об отпуске товара «Сахар» и одна из записей таблицы «Отпуск товаров» содержат сведения об отпуске товара «Рафинад», данные о котором отсутствуют в таблице «Товары».

И в первом, и во втором случае произошло нарушение целостности базы данных, т.е. хранящаяся в ней информация становится недостоверной.

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