Внешний ключ - поле или набор полей одной таблицы, являющихся ключом другой таблицы; используется для индексации логических связей между таблицами.
Запись о книге однозначно идентифицируются с помощью уникального поля Id, которое является первичным ключом таблицы.
Основные выборки из таблицы Books будут производиться по категориям (поле Category), так как книги однозначно привязаны к категории, к которой они относятся, с учетом даты появления книги в магазине (поле AppearDate), поэтому следует добавить составной индекс по этим двум полям.
В соответствии с техническим заданием необходимо обеспечить поиск товара в названиях и описаниях товара (поля Name и Synopsis), для ускорения возможностей поиска необходимо определить индексы по этим полям. Индексы - механизм физического хранения информации, позволяющий ускорить поиск значений в полях таблицы.
В Интернет-магазине предусматривается возможность выборки информации по имени автора или названию издательства, следовательно, необходимо добавить еще два индекса (поля Author и Publisher). Об авторе достаточно знать имя и краткую биографическую справку. Список произведений, написанных определенным автором, формируется на основе данных таблицы Books. Параметры таблицы авторов Athors описаны в таблице 4.
Таблица 4. Поля таблицы авторов (Authors)
Поле таблицы | Тип данных | Описание |
Id | SMALLINT UNSIGNED | Уникальный идентификатор автора |
Name | VARCHAR(255) | Имя автора |
Biography | TEXT | Краткая биографическая справка |
Первичный ключ, однозначно определяющий запись в таблице, - поле Id. Основные запросы к таблице авторов будут производиться по первичному ключу Id, поэтому другие индексы в данной таблице не потребуются. В информацию об издательстве включим название и краткую характеристику. В то же время ссылку на сайт, например, категорически нельзя включать, поскольку многие издательства имеют свои Интернет-магазины, которые просто так рекламировать не стоит. Параметры таблицы издательств описаны в таблице 5.
Таблица 5. Поля таблицы издательств (Publishers)
Поле таблицы | Тип данных | Описание |
Id | SMALLINT UNSIGNED | Уникальный идентификатор издательства |
Name | VARCHAR(255) | Название издательства |
Description | TEXT | Краткое описание издательства |
Так же как и в таблице авторов, в этой таблице необходим только первичный ключ Id, однозначно определяющий запись в таблице.
Описанных выше четырех таблиц достаточно, чтобы создать структурированный каталог и представить полную (или почти полную) информацию о книгах, находящихся в нем.
Для того чтобы более точно проследить логику спроектированной базы данных и связи между таблицами, рисуется модель логической структуры данных. Фактически на данном этапе закончено проектирование структуры Интернет-каталога, на рисунке 3 представлена его окончательная модель.
При работе с MySQL модель логической работы требуется постоянно, поскольку в MySQL не реализован механизм внешних ключей, и проверку их целостности приходится проводить вручную.
Кроме хранения информации о каталоге книг в Интернет-магазине требуется информация о пользователе и товарах, которые он заказал. Информация о пользователе должна включать сведения, необходимые для доставки товара, а также данные авторизации и текущей сессии - это связано, прежде всего, с вопросами безопасности и обеспечения доступа удаленного пользователя. Список необходимых параметров приведен в таблице 6.
Таблица 6. Поля таблицы пользователей (Users)
Поле таблицы | Тип данных | Описание |
Id | MEDIUMINT UNSIGNED | Уникальный идентификатор покупателя |
Name | CHAR (127) | Имя покупателя |
Surname | CHAR (127) | Фамилия покупателя |
VARCHAR(64) | E-Mail покупателя | |
Phone | VARCHAR(20) | Телефон для подтверждения заказа |
Address | VARCHAR(255) | Адрес доставки |
IP | CHAR(14) | Текущий IP покупателя |
SessionKey | INT UNSIGNED | Уникальный код для авторизации |
LastVisit | DATETIME | Время последнего посещения |
OrderID | INT UNSIGNED | Номер текущего заказа |
Для полей Name и Surname (имя и фамилия покупателя соответственно) определена максимальная длина поля 127 символов, этого должно быть достаточно для большинства потенциальных покупателей, излишнее увеличение связано с тем, что иногда пользователи вводят и имя, и фамилию в одном поле.
Поле Email определено длиной 64 символа. Возможно, это излишне, так как большинство адресов не превышают 15-30 символов, но представим, что кто-то с очень длинным адресом захочет купить товар в этом магазине. В случае с информацией о покупателях лучше перестраховаться и предусмотреть такую возможность.
Поле Phone (номер телефона для подтверждения заказа) используется для хранения как номера телефона, так и кода города/страны (например, 7-(812)-312-00-00), если пользователь ввел эту информацию.
Для поддержания сессий пользователя идентификация выполняется по полям IP (текущий IP покупателя) и SessionKey (уникальный код для авторизации).
С помощью proxy-серверов несколько пользователей могут использовать один IP-адрес; чтобы исключить возможность подмены пользователя, в поле SessionKey генерируется уникальный для конкретного пользователя ключ сессии.
Дополнительное поле LastVisit (время последнего посещения) поможет управляющему каталогом удалять "новых" пользователей, добавивших товары, но не завершивших покупки в течение длительного времени.
Первичным ключом в данном случае является Id, но кроме Id пользователь также характеризуется уникальным E-Mail-адресом. Основные выборки будут производиться по полям Id, IP и LastVisit, эти поля включаются в отдельный индекс.
В приложении будет использована упрощенная схема пользовательской корзинки. Информация о добавленном в корзинку товаре непосредственно помещается в таблицу. Для реализации упрощенной схемы пользовательской корзинки достаточно параметров, описанных в таблице 7.
Таблица 7. Поля таблицы пользовательской корзинки (Orders)
Поле таблицы | Тип данных | Описание |
Id | INT UNSIGNED | Номер заказа |
Amount | TINYINT | Число товаров, добавленных в покупательскую корзинку |
Book | INT UNSIGNED | Идентификатор добавленного товара |
В данной таблице первичный ключ не используется. Записи выбираются согласно номеру заказа Id, для которого необходимо определить индекс.
Окончательная модель логической структуры базы данных представлена на рисунке 4.
Рисунок 4. Модель логической структуры Интернет-магазинаПосле уточнения структуры базы данных можно приступать к созданию сценария SQL. Нужно заметить, что в нашем случае это не более чем типовой сценарий, описывающий структуру и связи базы данных, но в дальнейшем на его основе будут строиться сценарии автоматизации создания БД.
Если для создания схемы базы данных вы пользовались каким-либо CASE-средством, возможно, вы сможете сгенерировать сценарий автоматически, на основе составленной модели базы данных.
3.2.Оптимизация структуры, навигации и информационного наполнения Интернет-магазина
Для четкого представления структуры создаваемого Интернет-магазина строится навигационная карта с указанием всех возможных страниц, на основании которой в дальнейшем будет разрабатываться сайт.
Как уже отмечалось выше, сайт вводится в действие поэтапно. Первоначально создается Интернет-каталог, после чего к нему добавляется недостающая функциональность Интернет-магазина. Навигационная карта должна быть составлена для выполнения каждого из этапов разработки.
Навигационная карта Интернет-каталога книжного магазина представлена на рисунке 5.
С главной страницы Интернет-каталога пользователь переходит на страницы каталога, в котором представлен список книг и их краткое описание, указаны ссылки на информацию об авторе, написавшем книгу, и издательстве, ее выпустившем. Информация об авторе состоит из краткой биографической справки и списка книг этого автора, представленных в Интернет-каталоге. Аналогично, страница с информацией об издательстве содержит описание издательства и список книг, выпущенных им и продаваемых в Интернет-каталоге.