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

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

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

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

Товар

Ед. изм.

Цена ед.

Товар

Дата

Кол-во (ед)

Сахар

кг

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Ф1

Информатика

10

10

Иванов В.В.

ТИ-1

1Ф1

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

10

12

Петров П.П.

ТИ-1

1Ф1

Информатика

12

62

Васин И.И.

РИО

1Ф1

Философия

62

78

Лавров И.И.

ТИ-1

1У1

Социология

62

85

Павлов В.А.

ЭИ-1

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

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

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

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

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

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

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