Идентифицирующаясвязьиспользуютсядлясвязи«многиекомногим»,даннаясвязьбудетсоединятьсущности«Заказ»и«Товар» (в одном заказе может быть несколько изделий) черезвспомогательнуюсущность«Корзина».Неидентифицирующаясвязь«одинкомногим»используетсядлясоединениядвухсильныхсущностей,онапередаетключвобластьнеключевых атрибутов.Даннаясвязьсоединяетсущности«Заказчик»и«Статус»с сущностью«Заказ», «Тип изделия», «Изображение», «Размер», «Цвет» ссущностью«Товар».База данных находится в первой нормальной форме, так как каждыйкортежсодержитоднозначениедлякаждогоатрибута.Например,всущности«Заказчик»атрибуты«ID», «Фамилия», «Имя«Телефон»,«Адрес»могутсодержатьединственное значение.Таблицынаходятсятакжевовторойнормальнойформе,посколькуонинаходятсявпервойнормальнойформеикаждыйнеключевойатрибутлюбогоотношениянепосредственнозависитотвсегопервичногоключасвоегоотношения.Например,всущности«Заказа»,котораянаходитсявпервойнормальнойформе,атрибуты«IDДаты»,«ID Заказчика»и «IDстатуса»зависятотатрибута «Номерзаказа».Базаданныхнаходятсявтретьейнормальнойформе,таккаконанаходится во второй нормальной форме и каждый не ключевой атрибут независит от другого не ключевого атрибута данного отношения. Например, всущности «Товар» с первичным ключом «id товара»,атрибуты «id типа изделия», «id изображения» «id цвета», «id размера», и«Количество»не зависятдруг отдруга.
Рисунок2–Логическаясхемабазыданных.
-
Физическая схема базы данных
Физическаямодельбазыданныхстроитсянаосновелогическоймодели.Онасодержитвседетали,необходимыеконкретнойСУБДдлясозданиябазы:наименованиятаблицистолбцов,типыданных,определенияпервичных и внешних ключей. Перечислим типы данных,
которыеиспользуютсявбазеданных:
-
SMALLINT - является основным типом целочисленных данных.
-
TINYINT – используется в записях, которые содержат значения меньше 255.
-
BIGINT – используется в больших числовых записях, в данной базе данных – при вводе номера телефона
-
DATE - Определяет дату. Формат строковых литералов: «ГГГГ-ММ- ДД».
-
CHAR (n) - строковые данные фиксированного размера, n определяет размер строки в байтах.
Дляудобствапостроенияфизическойбазыданныхбылоприняторешениеперейтисрусского языканаанглийский.Приведемассоциации:«Заказчик»–«customer»,«Заказ»–«order»,«Статус»–«Status», «Товар»–«product», «Типизображения»–«image_type»,«Типизделия»–«item»,«Корзина»– «cart». +Рисунок3 –Физическая схемабазыданных.
-
Реализация базы данных типографии
-
Реализация базы данных
Дляреализациифизической
модели реляционной базы данных, был использован язык SQL и СУБД phpMyAdmin.
Физическая реализация базы данных начинается с создания таблиц.
Пример создания таблицы « product»:
CREATE TABLE `product` (
`product_id` smallint(6) NOT NULL,
`item_type_id` smallint(6) NOT NULL,
`image_type_id` smallint(6) NOT NULL,
`quantity` smallint(50) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Чтобы установить связи между таблицами, необходимо определить первичные и внешние ключи. Пример создания первичного ключа в таблице customer:
ALTER TABLE `customer`
ADD PRIMARY KEY (`id`);
Пример создания первичного ключа в таблице cart:
ALTER TABLE `cart`
ADD KEY `order_id` (`order_id`),
ADD KEY `product_id` (`product_id`);
Остальные скрипты приведены в приложении А.
-
Реализация ограничений бизнес правил.
Триггер-этомеханизм,которыйвызывается,когдавуказаннойтаблицепроисходитопределенноедействие.Каждыйтриггеримеетследующиеосновныесоставляющие:имя,действиеиисполнение.Имятриггераможетсодержатьмаксимум128символов.Действиемтриггераможет быть или инструкция DML (INSERT, UPDATE или DELETE), илиинструкция DDL. Таким образом, существует два типа триггеров: триггерыDMLитриггерыDDL.Исполнительнаясоставляющаятриггераобычносостоитизхранимой процедуры илипакета.Создадим триггер на проверку того, если клиент заказывает печать на футболке , свитшоте или толстовке, то он указаны размер и пол:DELIMITER $$CREATE TRIGGER `chek_item` BEFORE INSERT ON `item` FOR EACH ROW IF ((new.item_type = 'футболка') or (new.item_type = 'свитшот') or (new.item_type = 'толстовка')) and (new.item_size = NULL) and (new.gender = NULL)THENsignal sqlstate '45000' set message_text = 'Укажите размер и пол для предмета одежды';END IF$$DELIMITER ;ОстальныетриггерыприведенывприложенииА.
-
Наполнение базы данных
После того, как были созданы сущности, построены связи, установленыпервичныеивнешниеключи
и реализованы все бизнес-правила можно
переходить к заполнению базы данных соответствующей информацией. Пример заполнения таблицы «item »:
INSERT INTO `item` (`item_id`, `item_type`, `item_color`, `item_size`, `price`, `gender`) VALUES
(1, 'футболка', 'черный', 46, 1000, 'женский'),
(2, 'футболка', 'черный', 50, 1000, 'мужской'),
(3, 'футболка', 'белый', 46, 1000, 'женский'),
(4, 'футболка', 'белый', 50, 1000, 'мужской'),
(5, 'толстовка', 'черный', 48, 1600, 'унисекс'),
(6, 'толстовка', 'белый', 48, 1600, 'унисекс'),
(7, 'свитшот', 'черный', 48, 1200, 'унисекс'),
(8, 'свитшот', 'белый', 48, 1200, 'унисекс'),
(9, 'кружка', 'белый', NULL, 800, NULL),
(10, 'холст', 'белый', NULL, 1000, NULL);
Остальные скрипты заполнения таблиц приведены в приложении А.
-
Разработка процедур
Как правило, в работе с БД используются одни и те же запросы, либонаборпоследовательныхзапросов.Хранимыепроцедурыпозволяютобъединитьпоследовательностьзапросовисохранитьихнасервере.Этооченьудобный инструмент.Даннаяпроцедурабыласозданадляоблегчениявводаданныхдлязаполнениятаблицы«Заказчик»:
DELIMITER
CREATE PROCEDURE add_customer (i smallint, n char(12), s char(30), p char(30), ad char(50), pn bigint(11))
BEGIN
INSERT INTO customer((`id`, `name`, `surname`, `patronymic`, `adress`, `phone_number`) values (i, n, s, p, ad, pn)
END
-
Написание запросов к базе данных
Дляизвлеченияинформацииизбазыданныхбудетиспользоватьсяоператор «SELECT». SELECT - оператор запроса (DML/DQL) в языке SQL,возвращающийнаборданных(выборку)избазы данных.Оператор возвращает ноль или более строк. Список возвращаемыхстолбцов задается в части оператора, называемой предложением SELECT.Поскольку SQL является декларативным языком, запрос SELECT определяетлишь требования к возвращаемому набору данных, но не является точнойинструкциейпоихвычислению.ОператорSELECTсостоитизнесколькихпредложений
(разделов):SELECTопределяетсписоквозвращаемыхстолбцов(каксуществующих, так и вычисляемых), их имена, ограничения на уникальностьстрокввозвращаемомнаборе,ограничениянаколичествострокввозвращаемомнаборе;
FROMзадаёттабличноевыражение,котороеопределяетбазовыйнаборданныхдляпримененияопераций,определяемыхвдругихпредложенияхоператора;WHEREзадаетограничениенастрокитабличноговыраженияизпредложенияFROM;GROUPBYобъединяетряды,имеющиеодинаковоесвойствосприменениемагрегатных функцийHAVINGвыбираетсредигрупп,определённыхпараметромGROUPBYORDERBYзадаеткритериисортировкистрок;отсортированныестрокипередаютсявточкувызова.ДляпримераработыоператораSELECTнижеприведензапрос,которыйвыводитсписоквсех выполненныхзаказовза сентябрь2022года.select order_id as 'Номер заказа', finish_date as 'Дата оформления'from`order`where finish _date >='2022-09-01'andfinish _date<='2022-09-31'ОстальныескриптыприведеныаприложенииА.Привыполнениикурсовойработыбылиукрепленызнания,полученныеналекционныхипрактическихзанятиях.Полученынавыкипроектированияи созданияреляционныхбазданных.В результате выполнения данной курсовой работы была создана базаданныхдляобслуживанияклиентовтипографии.Быливыполненывсезадачи,поставленныепередсозданиемБД.Базаданныхпостроенавсоответствииспредметнойобластью.