Правило 2: первичные ключи

База данных хорошо спроектирована в том случае, если каждая запись в любой таблице однозначно идентифицируется. Это означает, что значение некоторого поля (или нескольких полей) не повторяется ни в одной записи в таблице. Такой идентификатор называется первичным ключом (или просто ключом).

Правило 2: каждая таблица должна иметь уникальный идентификатор, или первичный ключ, который может состоять из одного или нескольких полей.

Всегда, когда это возможно, в качестве первичного ключа следует использовать самые простые данные, имеющие «естественные» уникальные значения. Почти всем публикуемым в мире книгам присваивается относительно короткий (12 символов) код ISBN (International Standard Book Number), который однозначно идентифицирует каждую книгу. Это делает поле ISBN хорошим «естественным» первичным ключом таблицы Книги. Хотя при использовании кода ISBN в трех таблицах кажется, что создаются повторяющиеся поля, на самом деле в этом случае значительно уменьшается общий объем хранимых данных. Длинное поле Название книги сохраняется в таблице Книги только один раз для каждой книги, а не в каждой записи заказа. Таким образом, дублируется только небольшой элемент данных, поле ISBN, что позволяет связать таблицы, содержащие данные о заказах, авторах и книгах. Реляционные СУБД предоставляют специальные средства, поддерживающие такую технику проектирования и позволяющие легко собирать в единое целое данные, хранящиеся в связанных таблицах.

При создании новой таблицы Access всегда предлагает определить для нее первичный ключ. Для многих таблиц нам придется создать искусственный первичный ключ. В таком случае Access добавляет к каждой записи поле, в которое записывается содержимое счетчика записей. Приложение Книги, по всей вероятности, должно генерировать уникальный номер или код для каждого создаваемого заказа. Access предоставляет специальный тип данных, так называемый счетчик, которой генерирует уникальный номер для каждой новой записи таблицы. В таблице Содержание заказа комбинация кода заказа, генерируемого Access, и ISBN книги, по-видимому, должна быть уникальной для каждой записи (пользователю нет смысла создавать в этой таблице несколько записей для конкретного названия книги в одном заказе). Вариант проекта базы данных после добавления первичных ключей представлен на рис. 8.8.

 

Заказчики и заказы

Код заказа Дата заказа Имя заказчика Адрес заказчика Город заказчика Район или область заказчика Почтовый индекс заказчика Страна заказчика

 

Телефон заказчика Общая cтои-мость Название магазина Адрес магазина Город магазина Район или область магазина Почтовый индекс магазина Телефон магазина

 

Содержание заказа

Код заказа ISBN Количество книг Цена Скидка Розничная цена

 

Книги

ISBN Название книги Предпола гаемая цена Год издания Порядковый номер издания Количество страниц Аннота ция Диск

 

Книги и авторы

ISBN Фамилия автора Имя автора Отчество автора Сведения об авторе Адрес электронной почты автора

 

Без заливки показаны ПЕРВИЧНЫЕ КЛЮЧИ

 

Рис. 8.8 Таблицы базы данных Книги, с определенными в них первичными ключами