ВУЗ: Томский государственный университет систем управления и радиоэлектроники
Категория: Учебное пособие
Дисциплина: Базы данных
Добавлен: 28.11.2018
Просмотров: 5439
Скачиваний: 10
46
В
этом
случае
можно
создать
таблицу
(
рис
. 2.7),
в
которой
каждому
подразделению
организации
соответствует
одна
за
-
пись
.
Эта
запись
ссылается
на
запись
,
соответствующую
под
-
разделению
более
высокого
уровня
,
в
которое
входит
данное
подразделение
.
И
только
в
записи
о
подразделении
самого
вы
-
сокого
уровня
нет
подобной
ссылки
.
№
под
-
раз
-
деления
Название
подразделения
№
подразделения
предыдущего
уровня
1
Департамент
автоматизации
2
Техническое
управление
1
3
Управление
разработки
и
экс
-
плуатации
программных
сис
-
тем
1
4
Отдел
сетевого
оборудования
2
5
Ремонтный
отдел
2
6
АТС
2
7
Отдел
эксплуатации
3
8
Отдел
разработки
3
9
Информационная
группа
7
10
Административная
группа
7
11
Диспетчерское
бюро
10
Рис
. 2.7.
Табличное
представление
структуры
организации
2.4.
Ссылочная
целостность
Рассмотрим
наиболее
часто
встречающуюся
в
базах
данных
связь
один
-
ко
-
многим
.
Соответствующие
таблицы
показаны
на
рис
. 2.8.
Как
можно
заметить
,
дочерняя
и
родительская
таблицы
связаны
между
собой
по
общему
полю
«
Товар
».
Назовем
это
поле
полем
связи
.
47
Таблица
«
Товары
»
Таблица
«
Отпуск
товаров
»
Рис
. 2.8.
Связанные
таблицы
базы
данных
Возможны
два
вида
изменений
,
которые
приведут
к
утере
связей
между
записями
в
родительской
и
дочерней
таблицах
:
•
изменение
значения
поля
связи
в
записи
родительской
таб
-
лицы
без
изменения
значений
полей
связи
в
соответствующих
записях
дочерней
таблицы
;
•
изменение
значения
поля
связи
в
одной
из
записей
дочер
-
ней
таблицы
без
соответствующего
изменения
значения
полей
связи
в
родительской
и
дочерней
таблицах
.
Рассмотрим
первый
случай
.
На
рис
. 2.9
показано
изменение
значения
поля
«
Товар
»
с
«
Сахар
»
на
«
Рафинад
»
в
таблице
«
То
-
вары
».
В
таблице
«
Отпуск
товаров
»
значение
поля
связи
«
Са
-
хар
»
осталось
прежним
.
В
результате
:
•
в
дочерней
таблице
«
Отпуск
товаров
»
для
товара
«
Рафи
-
над
» (
таблица
«
Товары
»)
нет
сведений
о
его
отпуске
со
склада
;
•
некоторые
записи
таблицы
«
Отпуск
товаров
»
содержат
сведения
об
отпуске
товара
«
Сахар
»,
о
котором
нет
информа
-
ции
в
таблице
«
Товары
».
Товар
Ед. изм.
Цена
ед.
Сахар
кг 10
Макароны кг 10
Куры
кг 30
Фанта
бут. 2л 20
Товар
Дата
Кол-во
(ед.)
Сахар 10.12.99
100
Сахар 12.12.99
200
Сахар 14.12.99
50
Макароны 10.12.99 1
000
Макароны 11.12.99 500
Фанта 10.12.99
2
000
Фанта 12.12.99
3
000
48
Таблица
«
Товары
»
Таблица
«
Отпуск
товаров
»
Рис
. 2.9.
Нарушение
целостности
базы
данных
;
записи
с
товаром
«
Сахар
» (
таблица
«
Отпуск
товаров
»)
не
имеют
родительской
записи
Рассмотрим
второй
случай
.
Пусть
в
одной
из
записей
табли
-
цы
«
Отпуск
товаров
»
значение
поля
связи
«
Сахар
»
изменилось
на
«
Рафинад
» (
рис
. 2.10).
В
результате
:
•
в
дочерней
таблице
«
Отпуск
товаров
»
недостоверны
све
-
дения
об
отпуске
со
склада
товара
«
Сахар
» (
таблица
«
Това
-
ры
»);
•
одна
из
записей
таблицы
«
Отпуск
товаров
»
содержит
дан
-
ные
об
отпуске
товара
«
Рафинад
»,
сведения
о
котором
отсутст
-
вуют
в
таблице
«
Товары
».
Таблица
«
Товары
»
Таблица
«
Отпуск
товаров
»
Рис
. 2.10.
Нарушение
целостности
базы
данных
:
запись
с
товаром
«
Рафинад
» (
таблица
«
Отпуск
товаров
»)
не
имеет
родительской
записи
Товар
Ед. изм.
Цена
ед.
Рафинад
кг 10
Макароны кг 10
Куры
кг 30
Фанта
бут. 1л 20
Товар
Дата
Кол-во
(ед.)
Сахар 10.12.99
100
Сахар 12.12.99
200
Сахар 14.12.99
50
Макароны 10.12.99 1
000
Макароны 11.12.99 500
Фанта 10.12.99
2
000
Фанта 12.12.99
3
000
Товар
Ед. изм.
Цена
ед.
Сахар
кг 10
Макароны кг 10
Куры
кг 30
Фанта
бут. 1л 20
Товар
Дата
Кол-во
(ед.)
Рафинад 10.12.99
100
Сахар 12.12.99
200
Сахар 14.12.99
50
Макароны 10.12.99 1
000
Макароны 11.12.99 500
Фанта 10.12.99
2
000
Фанта 12.12.99
3
000
49
И
в
первом
,
и
во
втором
случае
мы
наблюдаем
нарушение
целостности
базы
данных
,
это
означает
,
что
хранящаяся
в
ней
информация
становится
недостоверной
.
СУБД
обычно
блокирует
действия
,
которые
нарушают
цело
-
стность
связей
между
таблицами
,
т
.
е
.
нарушают
ссылочную
целостность
.
Когда
говорят
о
ссылочной
целостности
,
имеют
в
виду
совокупность
связей
между
отдельными
таблицами
во
всей
БД
.
Нарушение
хотя
бы
одной
такой
связи
делает
информацию
в
БД
недостоверной
.
Чтобы
предотвратить
потерю
ссылочной
целостности
,
ис
-
пользуется
механизм
каскадных
изменений
.
Он
состоит
в
обеспечении
следующих
действий
:
•
при
изменении
поля
связи
в
записи
родительской
таблицы
следует
синхронно
изменить
значения
полей
связи
в
соответст
-
вующих
записях
дочерней
таблицы
;
•
при
удалении
записи
в
родительской
таблице
следует
уда
-
лить
соответствующие
записи
в
дочерней
таблице
.
Изменения
или
удаления
в
записях
дочерней
таблицы
при
одновременном
изменении
(
удалении
)
записи
родительской
таблицы
называются
каскадными
изменениями
и
каскадными
удалениями
.
Существует
другая
разновидность
каскадного
удаления
:
при
удалении
родительской
записи
в
записях
дочерних
таблиц
зна
-
чения
полей
связи
обнуляются
.
Эта
разновидность
применяется
редко
,
т
.
к
.
дочерние
таблицы
в
этом
случае
будут
содержать
избыточные
данные
,
например
,
сведения
о
товаре
,
которого
нет
на
складе
.
Обычно
для
реализации
ссылочной
целостности
в
дочерней
таблице
создают
внешний
ключ
,
в
который
входят
поля
связи
с
дочерней
таблицы
.
Этот
ключ
для
дочерней
таблицы
является
первичным
и
поэтому
по
составу
полей
должен
совпадать
с
пер
-
вичным
ключом
родительской
таблицы
или
реже
–
с
частью
первичного
ключа
.
2.5.
Индексы
По
определениям
ключей
(
первичных
или
вторичных
,
см
.
п
. 2.2)
СУБД
автоматически
строит
индексы
,
которые
представ
-
ляют
собой
механизмы
быстрого
доступа
к
хранящимся
в
таб
-
лицах
данным
.
50
Сущность
индексов
состоит
в
том
,
что
они
хранят
отсортиро
-
ванные
значения
индексных
полей
(
т
.
е
.
полей
,
по
которым
по
-
строен
индекс
)
и
указатель
на
запись
в
таблице
.
Например
,
пусть
имеется
таблица
,
показанная
на
рис
. 2.11.
Порядко
-
вый
№
записи
Дата
прихода
товара
Наименование
товара
Количество
,
кг
1 10.12.1999
Сахар
10
2 12.12.1999
Картофель
50
3 12.12.1999
Свекла
20
4 14.12.1999
Сахар
50
5 14.12.1999
Свекла
10
6 16.12.1999
Сливы
4
Рис
. 2.11
Физическая
структура
таблицы
С
логической
точки
зрения
ее
индексы
выглядит
так
,
как
по
-
казано
на
рис
. 2.12.
Индекс
по
дате
прихода
товара
Индекс
по
наименова
-
нию
товара
Индекс
по
количеству
Дата
прихода
№
за
-
писи
Наименова
-
ние
товара
№
записи
Коли
-
чество
№
записи
10.12.99 1
Картофель
2
4
6
12.12.99 2
Сахар
1 10
1
12.12.99 3
Сахар
4 10
5
14.12.99 4
Свекла
3 20
3
14.12.99 5
Свекла
5 50
2
16.12.99 6
Сливы
6 50
4
Рис
. 2.12.
Логическая
структура
индексов
Обратите
внимание
:
значения
полей
в
индексе
(«
Дата
прихо
-
да
», «
Наименование
товара
», «
Количество
»)
сортируются
по
возрастанию
,
что
существенно
ускоряет
поиск
нужных
значе
-