На протяжении всего курса в качестве примера будем рассматривать одну базу данных компьютерного магазина shop.
База данных компьютерного магазина состоит из четырех таблиц:
catalogs — список торговых групп;
products— товарные позиции;
users — список зарегистрированных пользователей магазина;
orders — список осуществленных сделок.
Таблица catalogs предназначена для хранения торговых групп, таких как "Материнские платы", "Процессоры", "Видеокарты" и т. п. Таблица состоит из двух полей:
id_catalog — уникальный номер, тип поля INT(11);
name — имя раздела, тип поля CHAR(20).
Таблица products содержит конкретные товарные позиции, такие как "Celeron 2.0GHz", "Intel Pentium 4 3.2GHz" и т. п. Таблица состоит из семи полей:
id_product — уникальный номер товарной позиции; тип поля INT (11) NOT NULL
name — название товарной позиции; тип поля CHAR (20)
price — цена; тип поля DECIMAL (7,2)
count — количество товарных позиций на складе; тип поля INT (11)
mark — относительная оценка товара; тип поля FLOAT (4,1)
description — описание; тип поля TEXT
id_catalog — номер торговой группы из таблицы id_catalog, которой принадлежит товарная позиция тип поля INT(11) NOT NULL.
Поле id_catalog устанавливает связь между таблицами catalog и products. Зная уникальный номер каталога id_catalog, всегда можно узнать, какие товарные позиции принадлежат данной товарной группе и наоборот, к какой товарной группе принадлежит товарная позиция с конкретным значением id_catalog. MySQL позволяет сделать это при помощи несложных SQL-запросов, которые будут рассмотрены в следующих главах.
Таблица usersсодержит записи с информацией о зарегистрированных покупателях и состоит из восьми полей:
iduser — уникальный номер покупателя; INT(11) NOT NULL
surname — фамилия покупателя; CHAR (25)
name — имя покупателя; CHAR (20)
patronymic — отчество покупателя CHAR (30);
phone — телефон покупателя (если имеется); CHAR (12)
userstatus — статус покупателя, поле типа enum ('active','passive','lock','gold'), которое может принимать одно из четырех значений;
active — авторизованный покупатель, который может осуществлять покупки через Интернет;
passive— неавторизованный покупатель (значение по умолчанию), который осуществил процедуру регистрации, но не подтвердил ее и пока не может осуществлять покупки в магазине через Интернет, но ему доступны каталоги для просмотра;
lock — заблокированный покупатель, не может осуществлять покупки и просматривать каталоги магазина;
gold— активный покупатель с хорошей кредитной историей, которому предоставляется скидка при следующих покупках в магазине.
Поля phone, email и url снабжены атрибутом, т. к. посетитель имеет право не указывать эту информацию. Если эта информация не указана, то она носит неопределенный характер: телефона, e-mail и домашней страницы у покупателя может просто не быть, с другой стороны, он мог не захотеть их указывать. Поэтому, чтобы указать неопределенность этой информации, в поле следует поместить значение null. Все остальные поля получают атрибут not null, даже если он не указывается.
Таблица orders содержит информацию о покупках, совершенных в магазине, и включает пять полей:
id_order — уникальный номер сделки; тип поля INT(11) NOT NULL
id_user — номер пользователя из таблицы users; тип поля INT(11) NOT NULL
ordertime — время совершения сделки; тип поля DATE
number — число приобретенных товаров; тип поля INT(11)
id_product — номер товарной позиции из таблицы products. тип поля INT (11)
В таблице orders устанавливается связь сразу с двумя таблицами: users, за счет поля users, и products, за счет поля id_product. Это позволит для каждой покупки восстановить покупателя и приобретенный товар. С другой стороны, можно узнать число покупок, совершенных каждым из покупателей, а также частоту покупки той или иной товарной позиции, что позволит увеличить или уменьшить закупки товара и тем самым произвести оптимизацию работы магазин.