EndSub
Физическая модель – это привязка логической модели к конкретной среде хранения и методам хранения данных. При проектировании физической модели базы данных необходимо описать среду и метод хранения информации. Для этого необходимо изучить особенности организации данных выбранной СУБД.
Для проектирования базы данных для Интернет-магазина была выбрана СУБД MSAccess. Для хранения данных в этой СУБД используются таблицы. В них хранится вся информация о предметной области. Наша база данных включает несколько взаимосвязанных таблиц. Объекты, которые были описаны при построении инфологической модели предметной области, в базе данных являются таблицами.
Представим описание объектов и связей между ними в виде физической ER-модели, сованной на методологии IDEF1X, созданной в выбранном для проектирования CASE-средстве CA ERwin Data Modeler.
На рисунках ниже представлены разработанные таблицы:
Таблица «Товар»
Таблица «Поставщик/категория»
Таблица «Товар/оценка»
Таблица «Покупатель»
Таблица «Кредитная_карта»
Таблица «Заказ/товар»
Таблица «Доставка»
Таблица «Сотрудник»
Таблица «Точка_выдачи»
База данных состоит из взаимосвязанных таблиц, которые наполняются записями. Ведение базы данных подразумевает под собой возможность управления записями: их добавление, изменение, удаление. Реализация данных возможностей возлагается на СУБД.
Существует несколько способов реализации управления базой данных в MSACCESS. В частности, любое из указанных действий можно выполнить тремя способами:
- через раздел СУБД «Таблицы», производя действия по изменению, добавлению или удалению непосредственно в таблице;
- через раздел СУБД «Формы», выполняя необходимые действия в таблице через интерфейс формы;
- через раздел СУБД «Запросы», выполняя запросы на обновление, добавление или удаление данных.
Существует 3 способа ввода данных: ввод с клавиатуры; сохранение данных, сформированных иными программными средствами; импорт из других источников. В нашей базе данных мы использовали ввод с клавиатуры. В процессе ввода информации были использованы следующие приемы: перенос значений полей из предыдущих записей; замена ввода выбором из списка, вспомогательные запросы для полей, которые необходимо вычислять (напр. суммарный вес или общая стоимость заказа).
Ввод информации в базу данных может осуществляться путем ввода данных в таблицу. Но такой способ имеет многие очевидные недостатки. Поэтому для этих целей обычно используются экранные формы. Формы – это окна, через которые пользователь взаимодействует с программным кодом приложения и объектами данных. Ввод данных при помощи форм очень простой в использовании. С помощью форм также можно осуществлять полноценную навигацию по таблице.
При проектировании нашей базы данных ввод информации осуществлялся при помощи форм. Экранные формы создаются либо в режиме конструктора, либо автоматически по выбранным полям таблицы или запроса. Корректировка данных возможна в этих же формах.
Учитывая, что наш проект предполагает осуществление поступления данных в базу через сайт Интернет-магазина – для удобства работы с нашей базой данных мы реализовали специальные формы, частично эмулирующие его работу. Эти формы имеют следующий вид:
Экранная форма «Оформление заказа»
Экранная форма «Регистрация»
Экранная форма «Сайт»
8. Организация корректировки БД
Корректировка данных в базе данных может осуществляться путем корректировки данных в форме. В основных таблицах нашей БД, например «Заказ», «Доставка», «Покупатель» основная информация чаще всего поступает извне, а именно с сайта интернет-магазина, то формы, соответствующие этим таблицам созданы прежде всего для корректировки (заполнения остальными данными, например назначение ответственного сотрудника на поступивший заказ или доставку) записей. Приведем примеры этих форм:
9. Описание информационных потребностей пользователей и выбор способов их реализации
Информационные потребности пользователей выражаются в следующем: пользователям базой данных необходимо находить нужную им информацию в БД, просматривать ее, выводить на печать. Для этих целей использую отчеты и запросы. Запросов может быть создано довольно много, поэтому реализованы лишь самые необходимые. К ним относятся:
Запрос на получение товарного чека
SELECT Товар.id_товара AS ID, Товар.Название_товара AS Наименование, Count([Заказ Товар].id_товара) AS Количество, Sum(Товар.Цена_товара) AS Цена, [Заказ Товар].[№_заказа] AS [Товарный чек №]
FROM Товар INNER JOIN [Заказ Товар] ON Товар.id_товара = [Заказ Товар].id_товара
GROUP BY Товар.id_товара, Товар.Название_товара, [Заказ Товар].[№_заказа]
HAVING [Заказ Товар].[№_заказа]=[Введите № заказа];
Запрос на получение гарантийного талона
SELECT Товар.id_товара, Товар.Название_товара, Count([Заказ Товар].id_товара), Товар.Гарантия_мес, [Заказ Товар].[№_заказа]
FROM Товар INNER JOIN [Заказ Товар] ON Товар.id_товара = [Заказ Товар].id_товара
GROUP BY Товар.id_товара, Товар.Название_товара, Товар.Гарантия_мес, [Заказ Товар].[№_заказа]
HAVING [Заказ Товар].[№_заказа]=[Введите номер заказа];
Запрос на получение информации о самой покупаемой продукции
SELECT TOP 5 Товар.Название_товара, Count([Заказ Товар].id_товара)
FROM Товар INNER JOIN [Заказ Товар] ON Товар.id_товара = [Заказ Товар].id_товара
GROUP BY Товар.Название_товара
ORDER BY Count([Заказ Товар].id_товара) DESC;
Запрос на получение информации о самой рейтинговой продукции
SELECT Товар.Название_товара, Avg([Товар/Оценка].Оценка) AS [Средняя оценка]
FROM Товар INNER JOIN [Товар/Оценка] ON Товар.id_товара = [Товар/Оценка].id_товара
GROUP BY Товар.Название_товара
ORDER BY Avg([Товар/Оценка].Оценка) DESC;
Запрос на получение сводки доходности предприятия по различным категориям продукции
SELECT DISTINCT Товар.Категория_товара, Sum(Товар.Цена_товара)
FROM Товар INNER JOIN (Заказ INNER JOIN [Заказ Товар] ON Заказ.[№_заказа] = [Заказ Товар].[№_заказа]) ON Товар.id_товара = [Заказ Товар].id_товара
GROUP BY Товар.Категория_товара, Заказ.Статус_заказа
HAVING Заказ.Статус_заказа="выполнен";
Запрос на вывод новинок
SELECT TOP 5 Товар.Название_товара, Avg([Товар/Оценка].Оценка) AS [Средняя оценка], Товар.Цена_товара
FROM Товар LEFT JOIN [Товар/Оценка] ON Товар.id_товара = [Товар/Оценка].id_товара
GROUP BY Товар.Название_товара, Товар.Цена_товара, Товар.id_товара
ORDER BY Товар.id_товара DESC;
Запрос на выдачу информации о распределении проданного товара в зависимости от пола клиентов
SELECT Товар.Категория_товара, Покупатель.Пол, Count(Покупатель.Пол) AS Количество
FROM Товар INNER JOIN (Покупатель INNER JOIN (Заказ INNER JOIN [Заказ Товар] ON Заказ.[№_заказа] = [Заказ Товар].[№_заказа]) ON Покупатель.Логин = Заказ.Логин) ON Товар.id_товара = [Заказ Товар].id_товара
GROUP BY Товар.Категория_товара, Покупатель.Пол;
Запрос на историю заказов
SELECT Заказ.[№_заказа], Заказ.Дата_заказа, Заказ.Стоимость_заказа, Заказ.Логин
FROM Товар INNER JOIN (Заказ INNER JOIN [Заказ Товар] ON Заказ.[№_заказа] = [Заказ Товар].[№_заказа]) ON Товар.id_товара = [Заказ Товар].id_товара
GROUP BY Заказ.[№_заказа], Заказ.Дата_заказа, Заказ.Стоимость_заказа, Заказ.Логин
HAVING Заказ.Логин=[Введите логин];
Запрос на историю покупок
SELECT Заказ.Логин, Товар.Название_товара, Товар.Цена_товара, [Заказ Товар].[№_заказа]
FROM Товар INNER JOIN (Заказ INNER JOIN [Заказ Товар] ON Заказ.[№_заказа] = [Заказ Товар].[№_заказа]) ON Товар.id_товара = [Заказ Товар].id_товара
GROUP BY Заказ.Логин, Товар.Название_товара, Товар.Цена_товара, [Заказ Товар].[№_заказа]
HAVING Заказ.Логин=[Введите логин] AND [Заказ Товар].[№_заказа]=[Введите № заказа];
Вся информация полученная в ходе выполнения описанных выше запросов может быть выведена как в виде таблиц для просмотра, так и в виде сформированных отчетов. Отчеты можно просмотреть и вывести на печать. Отчеты, сформированные в нашем проекте, имеют следующий вид:
Товарный чек
Гарантийный талон
Отчет о новинках интернет-магазина
Отчет по самым рейтинговым товарам магазина
Отчет по самым популярным товарам магазина
История заказов
История покупок
При проектировании и разработке любой базы данных интерфейс играет важную роль. Он представляет собой совокупность средств и методов, при помощи которых пользователь взаимодействует с различными компонентами базы данных.