ВУЗ: Томский государственный университет систем управления и радиоэлектроники
Категория: Учебное пособие
Дисциплина: Базы данных
Добавлен: 28.11.2018
Просмотров: 5438
Скачиваний: 10
41
Покупатель
Адрес
Телефон
Геракл
,
ТОО
107005,
Москва
, 2-
я
Бауманская
ул
., 12
273-00-14
Пищеторг
,
ЗАО
105066,
Москва
,
Измайловский
б
-
р
, 18/11
165-18-99
База
№
28
274088,
Хотьково
МО
,
ул
.
Лесная
,
1
17-54
Рис
. 2.2.
Пример
таблицы
«
Покупатель
»
Базы
данных
,
между
отдельными
таблицами
которых
суще
-
ствуют
связи
,
называются
реляционными
(
от
relation -
связь
,
отношение
).
Связанные
отношениями
таблицы
взаимодействуют
по
прин
-
ципу
главная
(master) -
подчиненная
(detail).
В
нашем
примере
таблица
«
Отпуск
товаров
» -
главная
,
а
таблица
«
Покупатель
» -
подчиненная
.
Главную
таблицу
часто
называют
родительской
,
а
подчиненную
-
дочерней
.
Одна
и
та
же
таблица
может
быть
главной
по
отношению
к
одной
таблице
БД
и
дочерней
по
отно
-
шению
к
другой
.
2.2.
Первичные
ключи
и
индексы
В
каждой
таблице
БД
может
существовать
первичный
ключ
−
поле
или
набор
полей
,
однозначно
идентифицирующий
запись
.
Значение
первичного
ключа
в
таблице
БД
должно
быть
уникаль
-
ным
,
то
есть
в
таблице
не
должно
существовать
двух
или
более
записей
с
одинаковым
значением
первичного
ключа
.
Первичные
ключи
облегчают
установление
связи
между
таб
-
лицами
.
В
таблице
«
Покупатель
»
таким
ключом
является
одно
-
именное
поле
.
Установив
связь
по
первичному
ключу
,
мы
можем
выяснить
,
что
,
например
, 10.02.1999
года
со
склада
было
отпу
-
щено
100
единиц
товара
«
Сахар
»
покупателю
«
Геракл
,
ТОО
»,
офис
которого
расположен
по
адресу
: 107005,
Москва
, 2-
я
Бау
-
манская
ул
., 12 (
телефон
для
связи
273-00-14).
Поскольку
первичный
ключ
должен
быть
уникальным
,
для
не
-
го
могут
использоваться
не
все
поля
таблицы
.
В
приведенном
примере
название
покупателя
вряд
ли
может
быть
уникальным
,
поэтому
поле
«
Покупатель
»
не
может
использоваться
в
качестве
первичного
ключа
.
Значительно
более
редким
является
совпа
-
42
дение
телефонов
у
двух
разных
покупателей
,
поэтому
поле
«
Телефон
»
в
большей
степени
подходит
на
роль
первичного
ключа
.
Если
в
таблице
нет
полей
,
значения
в
которых
уникаль
-
ны
,
для
создания
первичного
ключа
в
нее
обычно
вводят
допол
-
нительное
числовое
поле
,
значениями
которого
СУБД
может
распоряжаться
по
своему
усмотрению
.
Если
,
например
,
в
таб
-
лицу
«
Покупатель
»
добавить
поле
«
№№
»,
то
связанные
табли
-
цы
будет
выглядеть
так
:
Дата
Товар
Покупатель
Отпущено
(
ед
.)
10.12.99
Сахар
1
100
10.12.99
Сахар
1
100
12.12.99
Сахар
2
2
000
12.12.99
Макароны
2
300
14.12.99
Сахар
1
200
15.12.99
Дрожжи
3
100
И
таблица
:
№№
Покупатель
Адрес
Телефон
1
Геракл
,
ТОО
107005,
Москва
,
2-
я
Бауманская
ул
., 12
273-00-14
2
Пищеторг
,
ЗАО
105066,
Москва
,
Измайловский
б
-
р
,
165-18-99
3
База
№
28
274088,
Хотьково
МО
,
ул
.
Лесная
, 1
17-54
Теперь
в
таблице
«
Отпуск
товаров
»
в
поле
«
Покупатель
»
указывается
значение
первичного
ключа
,
построенного
по
полю
«
№№
»
таблицы
«
Покупатель
»,
что
позволяет
установить
одно
-
значную
связь
между
таблицами
.
Вторичные
ключи
устанавливаются
по
полям
,
которые
час
-
то
используются
при
поиске
и
сортировке
данных
:
вторичные
ключи
(
см
.
п
. 2.5)
помогут
системе
значительно
быстрее
найти
нужные
данные
.
В
отличие
от
первичных
ключей
,
поля
для
ин
-
дексов
могут
содержать
неуникальные
значения
-
в
этом
,
собст
-
43
венно
,
и
заключается
главная
разница
между
первичными
и
вторичными
ключами
.
2.3.
Реляционные
отношения
между
таблицами
2.3.1.
Отношение
один
-
ко
-
многим
Таблица
«
Товары
»
Таблица
«
Отпуск
товаров
»
Рис
. 2.3.
Связь
один
-
ко
-
многим
Как
видно
из
рис
. 2.3,
одной
записи
из
родительской
таблицы
«
Товары
»
может
соответствовать
несколько
записей
в
дочерней
таблице
«
Отпуск
товаров
».
Обратите
внимание
на
глагол
мо
-
жет
:
он
означает
,
что
такая
возможность
-
потенциальная
и
что
в
родительской
таблице
могут
быть
записи
,
для
которых
в
дан
-
ный
момент
нет
записей
в
дочерней
таблице
(
например
,
товар
«
Куры
»).
Различают
две
разновидности
связи
один
-
ко
-
многим
:
в
пер
-
вом
случае
выдвигается
жесткое
требование
,
согласно
которому
всякой
записи
в
родительской
таблице
должны
соответствовать
записи
в
дочерней
таблице
;
во
втором
случае
подобное
требо
-
вание
не
носит
жесткого
характера
и
подразумевается
(
как
в
описанном
выше
случае
),
что
некоторые
записи
в
родительской
таблице
могут
не
иметь
связанных
с
ними
записей
в
дочерней
таблице
.
Связь
один
-
ко
-
многим
является
самой
распространенной
для
реляционных
баз
данных
.
Она
позволяет
моделировать
иерар
-
хические
структуры
данных
.
Товар
Ед. изм.
Цена
ед.
Сахар
кг 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
44
2.3.2.
Отношение
один
-
к
-
одному
Отношение
один
-
к
-
одному
имеет
место
,
когда
одной
записи
в
родительской
таблице
соответствует
одна
запись
в
дочерней
таблице
(
рис
. 2.4.).
Таблица
«
Сотрудники
»
Таблица
«
Информация
о
сотрудниках
»
Рис
. 2.4
Связь
один
-
к
-
одному
.
Данное
отношение
встречается
много
реже
,
чем
отношение
один
-
ко
-
многим
.
Его
используют
,
если
не
хотят
,
чтобы
таблица
БД
«
распухала
»
от
второстепенной
информации
.
Связь
один
-
к
-
одному
приводит
к
тому
,
что
для
чтения
связанной
информации
в
нескольких
таблицах
приходится
производить
несколько
опе
-
раций
чтения
,
что
замедляет
получение
нужной
информации
.
Кроме
того
,
базы
данных
,
в
состав
которых
входят
таблицы
со
связью
один
-
к
-
одному
,
не
могут
считаться
полностью
нормали
-
зованными
(
о
нормализации
см
.
ниже
).
Подобно
связи
один
-
ко
-
многим
,
связь
один
-
к
-
одному
может
быть
жесткой
и
нежесткой
.
2.3.3.
Отношение
многие
-
ко
-
многим
На
рис
. 2.5
показаны
таблицы
,
состоящие
в
отношении
мно
-
гие
-
ко
-
многим
.
Каждой
учебной
группе
соответствует
несколько
преподавателей
.
Каждый
преподаватель
может
вести
,
во
-
первых
,
несколько
разных
предметов
и
,
во
-
вторых
,
преподавать
в
разных
группах
.
№
ФИО
Должность
Отдел
1
Иванов И.И.
инженер 10
2
Петров П.П.
бухгалтер 20
3
Васин В.В.
прораб 10
… …
…
…
№
Год
рожд.
Кол-во
детей
…
1 1950 3
…
2 1952 1
…
3 1960 2
…
… …
…
…
45
Таблица
«
Учебные
группы
Таблица
и
дисциплины
»
«
Преподаватели
»
Рис
. 2.5.
Связь
многие
-
ко
-
многим
Некоторые
СУБД
не
поддерживают
связи
многие
-
ко
-
многим
на
уровне
индексов
и
ссылочной
целостности
(
см
.
следующий
подраздел
),
хотя
и
позволяют
реализовывать
ее
в
таблицах
не
-
явным
образом
.
Считается
,
что
БД
всегда
можно
перестроить
так
,
чтобы
любая
связь
многие
-
ко
-
многим
была
заменена
на
одну
или
более
связей
один
-
ко
-
многим
.
2.3.4.
Связи
между
записями
одной
таблицы
Между
записями
одной
таблицы
также
могут
существовать
связи
,
то
есть
одни
записи
могут
ссылаться
на
другие
.
Пусть
в
реляционной
БД
необходимо
хранить
древовидную
структуру
произвольного
уровня
,
например
,
структуру
организа
-
ции
(
рис
. 2.6).
Департамент
автоматизации
,
Техническое
управление
,
Отдел
сетевого
оборудования
,
Ремонтный
отдел
АТС
,
Управление
программными
системами
,
Отдел
эксплуатации
,
Информационная
группа
,
Административная
группа
,
Диспетчерское
бюро
,
Отдел
разработки
Рис
. 2.6.
Структура
организации
Груп-
па
Предмет
№ препо-
давателя
ПС-1 Программи-
рование
10
ТИ-1 Программи-
рование
12
ПС-1 Теория сис-
тем
10
РТ-2 Философия 62
ПС-1 Социология 62
…
… …
№
пре-
пода-
вате-
ля
ФИО
Кафед-
ра
10
Краснов Ю.Б.
ТИ-1
12
Володин В.Н.
ТИ-1
62
Булгаков В.М.
РИО
78
Тоянский Л.С.
ТИ-1
85
Подушкин М.А. ЭИ-1
… …
…