- •§3. Основные понятия реляционных баз данных: таблицы, записи, ключи, запросы, связи между таблицами. Типы отношений между объектами.
- •4. Проектирование предметной области. Объекты и атрибуты предметной области. Связи между объектами типа 1:1, 1:m, m:n.
- •Первичные ключи и индексы
- •Реляционные отношения между таблицами Отношение один-ко-многим
- •Отношение один-к-одному
- •Отношение многие-ко-многим
Первичные ключи и индексы
В каждой таблице БД может существовать первичный ключ поле или набор полей, однозначно идентифицирующий запись. Значение первичного ключа в таблице БД должно быть уникальным, то есть в таблице не должно существовать двух или более записей с одинаковым значением первичного ключа.
Первичные ключи облегчают установление связи между таблицами. В таблице «Покупатель» таким ключом является одноименное поле. Установив связь по первичному ключу, мы можем выяснить, что, например, 10.02.1999 года со склада было отпущено 100 единиц товара «Сахар» покупателю «Геракл, ТОО», офис которого расположен по адресу: 107005, Москва, 2-я Бауманская ул., 12 (телефон для связи 273-00-14).
Поскольку первичный ключ должен быть уникальным, для него могут использоваться не все поля таблицы. В приведенном примере название покупателя вряд ли может быть уникальным, поэтому поле «Покупатель» не может использоваться в качестве первичного ключа. Значительно более редким является совпадение телефонов у двух разных покупателей, поэтому поле «Телефон» в большей степени подходит на роль первичного ключа. Если в таблице нет полей, значения в которых уникальны, для создания первичного ключа в нее обычно вводят дополнительное числовое поле, значениями которого СУБД может распоряжаться по своему усмотрению. Если, например, в таблицу «Покупатель» добавить поле «№№», то связанные таблицы будет выглядеть так:
Дата
|
Товар
|
Покупатель
|
Отпущено (ед.)
|
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 |
База № 2 |
274088, Хотьково МО, ул. Лесная, 1 |
17-54 |
Теперь в таблице «Отпуск товаров» в поле «Покупатель» указывается значение первичного ключа, построенного по полю «№№» таблицы «Покупатель», что позволяет установить однозначную связь между таблицами.
Вторичные ключи устанавливаются по полям, которые часто используются при поиске и сортировке данных: вторичные ключи (см. п. 2.5) помогут системе значительно быстрее найти нужные данные. В отличие от первичных ключей, поля для индексов могут содержать неуникальные значения - в этом, собственно, и заключается главная разница между первичными и вторичными ключами.
Реляционные отношения между таблицами Отношение один-ко-многим
Таблица «Товары» Таблица «Отпуск товаров»
Рис. 2.3. Связь один-ко-многим
Как видно из рис. 2.3, одной записи из родительской таблицы «Товары» может соответствовать несколько записей в дочерней таблице «Отпуск товаров». Обратите внимание на глагол может: он означает, что такая возможность - потенциальная и что в родительской таблице могут быть записи, для которых в данный момент нет записей в дочерней таблице (например, товар «Куры»).
Различают две разновидности связи один-ко-многим: в первом случае выдвигается жесткое требование, согласно которому всякой записи в родительской таблице должны соответствовать записи в дочерней таблице; во втором случае подобное требование не носит жесткого характера и подразумевается (как в описанном выше случае), что некоторые записи в родительской таблице могут не иметь связанных с ними записей в дочерней таблице.
Связь один-ко-многим является самой распространенной для реляционных баз данных. Она позволяет моделировать иерархические структуры данных.