Страница 149 из 152 15.3. Проектирование базы данных В этом разделе мы обсудим две наиболее общие и одновременно влекущие за собой тяжелые последствия ошибки, обычно допускаемые в процессе проектирования базы данных:это отсутствие первичного ключа и отсутствие нормализации. Но для того, чтобы понимать, о чем здесь пойдет речь, необходимо по крайней мере иметь поверхностное знакомство с концепцией реляционных баз данных. К счастью, она достаточно проста. 15.3.1. Реляционные базы данных В общем смысле, база данных — это метод хранения данных в компьютере, вплоть до набора слов в файле. Однако в последние десятилетия термин база данных стал применяться исключительно по отношению к наборам данных, в которых реализована реляционная модель. Реляционная база данных — это база данных, которая рассматривается пользователями как набор отдельных таблиц. Таблицы состоят из строк и столбцов. Каждая строка является записью, а каждый столбец — полем. Рассмотрим таблицу Address. Она содержит пять столбцов: addrt attn:street city state zip Во многих случаях желательно, чтобы данные имели относительно свободную форму (например, столбец street может содержать буквы и цифры, заданные в совершенно произвольном порядке), но в других случаях данные можно ограничить определенным типом (целые числа или календарная дата). СУБД позволяет задавать тип данных, хранящихся в определенном столбце во время создания таблицы: CREATE TABLE address ( addr id INT UNSIGNED NOT NUL AUTOINCREMENT PRIMARY KEY, attn VARCHAR(30), # имя покупателя streetl VARCHAR(30) NOT NULL, # адрес street2 VARCHAR(30), # номер квартиры или еще что-то city VARCHAR(20) NOT NULL, # город state CHAR(2) NOT NULL, # две буквы аббревиатуры штата zip VARCHAR(IO) NOT NULL, # почтовый индекс } 15.3.2. Ошибка №1:отсутствует первичный ключ Эта ошибка тесно связана с первой, допускаемой новичками при разработке базы данных, — отсутствием первичного ключа. Первичным ключом называется поле или группа полей, служащих для уникальной идентификации данных в заданной таблице. В приведенном выше примере первичными ключами являются поля order# и addr# соответственно. Обратите внимание, что эти ключи совсем необязательно показывать конечному пользователю Web-узла, они существуют как первичные ключи только на сервере. Технически совсем нетрудно создать таблицу или даже таблицы, которые не имеют первичного ключа, можно даже создать вполне работающую систему, использующую такие таблицы. Но это чрезвычайно грубая ошибка проектирования. В некоторых случаях отличным кандидатом на роль первичного ключа являются данные, хранящиеся в самой таблице. Например, номера ISBN1 являются уникальными и при создании таблицы, хранящей информацию о книгах, отлично могут служить первичным ключом. Нет причины, которая не позволила бы использовать хранящиеся данные в качестве первичного ключа. <
|