Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
62
Добавлен:
01.05.2014
Размер:
669.7 Кб
Скачать

2.2. Первичные ключи и индексы

В каждой таблице БД может существовать первичный ключ поле или набор по­лей, однозначно идентифицирующий запись. Значение первичного ключа в таблице БД должно быть уникальным, то есть в таблице не должно существовать двух или более записей с одинаковым значением первичного ключа.

Первичные ключи облегчают установление связи между таблицами. В таблице «Покупатель» таким ключом является одноименное поле. Установив связь по пер­вичному ключу, мы можем выяснить, что, например, 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

База № 28

274088, Хотьково МО,

ул. Лесная, 1

17-54

Теперь в таблице «Отпуск товаров» в поле «Покупатель» указывается значение первичного ключа, построенного по полю «№№» таблицы «Покупатель», что позволя­ет установить однозначную связь между таблицами.

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

2.3. Реляционные отношения между таблицами

2.3.1. Отношение один-ко-многим

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

Рис. 2.3. Связь один-ко-многим

Как видно из рис. 2.3, одной записи из родительской таблицы «Товары» может со­ответствовать несколько записей в дочерней таблице «Отпуск товаров». Обратите внимание на глагол может: он означает, что такая возможность - потенциальная и что в родительской таблице могут быть записи, для которых в данный момент нет записей в дочерней таблице (например, товар «Куры»).

Различают две разновидности связи один-ко-многим: в первом случае выдвигается жесткое требование, согласно которому всякой записи в родительской таблице долж­ны соответствовать записи в дочерней таблице; во втором случае подобное требование не носит жесткого характера и подразумевается (как в описанном выше случае), что некоторые записи в родительской таблице могут не иметь связанных с ними записей в дочерней таблице.

Связь один-ко-многим является самой распространенной для реляционных баз дан­ных. Она позволяет моделировать иерархические структуры данных.

Соседние файлы в папке Базы данных1