Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

МиСПрИС_Задание3_Петрова_Романова_Заболотников_9373

.docx
Скачиваний:
15
Добавлен:
20.06.2023
Размер:
2.07 Mб
Скачать

МИНОБРНАУКИ РОССИИ

Санкт-Петербургский государственный

электротехнический университет

«ЛЭТИ» им. В.И. Ульянова (Ленина)

Кафедра информационных систем

отчет

по лабораторной работе №3

по дисциплине «Методы и средства проектирования ИС»

Тема: Приемы моделирования справочников

Студентка гр. 8374

Петрова С.В.

Студентка гр. 8374

Романова Е.С.

Студент гр. 8374

Заболотников М.Е.

Преподаватель

Дубенецкий В.А.

Санкт-Петербург

2022

Постановка задачи.

Разработать проект каркаса для работы с реестрами изделий с настраиваемым списком параметров.

Требования

Разработать проект каркаса для работы с перечислениями.

Функциональные требования:

  1. Схема классификатора должна сохраняться в базе данных.

  2. Обеспечить:

  1. Ведение списков параметров книг численного типа и типа перечисление;

  2. Редактирование состава параметров каждого подкласса книг;

  3. Описание ограничений на значения численных параметров книг;

  4. Редактирование значений параметров книг;

  5. Отбор книг заданного класса по значениям параметров;

  6. Обеспечить формирование и работу с агрегатами параметров

Анализ исходных данных.

В качестве исходных данных был выбран вариант 5: Самостоятельный выбор справочника для примера. Данные были взяты с сайта интернет-магазина "Лабиринт": https://www.labirint.ru/

Фрагмент классификатора:

Рисунок 1 – Фрагмент классификатора

Данный классификатор был разработан в предыдущей работе, и для дальнейшей работы с ним необходимо добавить часть, связанную с параметрами.

В классификатор были помещены жанры и поджанры книг, кроме того, каждой из книг, которые являются изделиями, был добавлен ряд параметров, таких как: количество страниц, авторы, переводчики, издательства, вес, ширина, толщина, длина, рейтинг, год издания и габариты. Каждый из параметров имеет свой тип. Авторы, переводчики, издательства являются параметрами типа перечисление; габариты являются агрегатом параметров – длины, ширины и толщины; оставшиеся параметры имеют численный тип.

Разработка функциональных требований к подсистеме.

На рис. 2 приведена диаграмма прецедентов Ведение справочника изделий.

Рисунок 2 – Диаграмма прецедентов

Пользователи делятся на клиентов и администраторов. Администратор обладает полномочиями ведения справочника и классификатора, то есть может выполнять действия, связанные с созданием, удалением и изменением всевозможных данных. Клиент же имеет доступ только к функциям просмотра и поиска информации.

Разработка проектной модели классов.

На рис. 3 представлена диаграмма классов для варианта использования. Ведение справочника изделий.

Рисунок 3 – Диаграмма классов для Ведение справочника изделий

Метакласс "Классификатор типов" был введён для описания типов параметров. Ассоциативная сущность "Значение параметра" необходима для задания значения параметра конкретного изделия/продукта. Связь между значением параметра и изделием определяет список значений параметров для конкретного изделия. Связь между значениями параметра и позицией перечисления имеет значение только в том случае, если параметр имеет тип перечисления. Для параметров численного типа в значении параметра введён атрибут "значение". Параметры типа "агрегат" также находятся в "Значении параметра" со специальной пометкой, которая помогает понять, что конкретно это за параметр.

Разработка модели хранения.

ER-диаграмма представлена на рис. 4.

Рисунок 4 – ER-диаграмма для проекта Работа со справочником изделий.

Сущность "parameter_type" хранит в себе все возможные типы параметров.

Сущность "enumeration" хранит в себе имена всевозможных перечислений.

Сущность "enum_value" содержит всевозможные значения всевозможных перечислений. Каждая запись имеет id значения, имя значения (само значение), ссылку на таблицу "enumeration", которая определяет, к какому конкретно перечислению данная запись принадлежит. Кроме того, в записи существует атрибут порядкового номера – значение в данном перечислении.

Сущность "unit_of_measure" представляет собой таблицу из всевозможных единиц измерений.

Сущность "product_class" является классификатором жанров и поджанров книг. Таблица имеет ссылку на единицы измерения.

Сущность "product" представляет из себя список всевозможных книжных изделий, имеет ссылку на класс изделия.

Сущность "parameter" представляет из себя список всевозможных параметров. Кроме того, для каждого из параметров указывается его тип, в зависимости от этого заполняются поля, ссылки на перечисления и ссылки на единицы измерения.

Сущность "agregate_position" представляет из себя таблицу связей между id параметра агрегата и id параметра, входящего в состав этого агрегата. Соответственно, таблица имеет две ссылки на таблицу параметров.

Сущность "product_parameters" выступает связью между продуктом и его параметрами. Соответственно, таблицы имеет ссылки на сущности "product" и "parameters". Кроме того, данная сущность имеет атрибут численного значения, в случае если параметр численный, и имеет ссылку на значение перечисления, если параметр является переислением.

Сущность "class_parameters" выступает в роли связи между классами и их параметрами, соответственно имеет две связи с таблицами "product_class" и "parameters". Помимо этого, она содержит в себе ограничения: в сущности эта таблица является ограничением для классов.

Реализация.

Такие таблицы, как "Единицы измерения", "Класс продукта", "Продукты", "Перечисления", "Значения перечислений", были созданы ещё в предыдущих работах, так что их будем использовать как данные. А рассматривать будем создание новых таблиц:

Рисунок 5 – Создание таблицы "Типы параметров"

Рисунок 6 – Создание таблицы "Параметры"

Рисунок 7 – Создание таблицы "Агрегаты"

Рисунок 8 – Создание таблицы "Параметры класса"

Рисунок 9 – Создание таблицы "Параметры продукта"

Создание функций:

Рисунок 10 – Добавление типа параметра

Рисунок 11 – Удаление типа параметра

Рисунок 12 – Добавление агрегата параметра

Рисунок 13 – Удаление агрегата параметра

Рисунок 14 – Добавление параметров класса

Рисунок 15 – Параметров класса

Рисунок 16 – Проверка значения параметра для продукта

Рисунок 17 – Добавление в таблицу параметров продукта (часть 1)

Рисунок 18 – Добавление в таблицу параметров продукта (часть 2)

Рисунок 19 – Добавление в таблицу параметров продукта (часть 3)

Рисунок 20 – Удаление строки из таблицы параметров продуктов

Рисунок 21 – Создание параметра

Рисунок 22 – Удаление параметра

Рисунок 23 – Вывод списка значений параметров продуктов

Рисунок 24 – Вывод список значений параметров классов

Тестирование.

Рисунок 25 – Результат добавления единицы измерения

Рисунок 26 – Результат добавления типов параметров

Рисунок 27 – Попытка добавления уже существующего типа параметра

Рисунок 28 – Результат добавления жанров книг

Рисунок 29 – Результат добавления самих книг

Рисунок 30 – Результат добавления перечислений

Рисунок 31 – Попытка добавления уже существующего перечисления

Рисунок 32 – Результат добавления авторов

Рисунок 33 – Попытка добавления уже существующего автора

Рисунок 34 – Попытка добавить значение в несуществующее перечисление

Рисунок 35 – Результат добавления издательств

Рисунок 36 – Результат добавления переводчиков

Рисунок 37 – Результат добавления параметров

Рисунок 38 – Результат добавления ограничений на некоторые численные параметры

Рисунок 39 – Результат добавления параметров агрегата

Рисунок 40 – Попытка добавить значение в неагрегат

Рисунок 41 – Попытка добавить значение в несуществующий агрегат

Рисунок 42 – Попытка добавить несуществующий параметр в агрегат

На рис. с 43-го по 48-й представлен процесс заполнения данными о параметрах книг:

Рисунок 43

Рисунок 44

Рисунок 45

Рисунок 46

Рисунок 47

Рисунок 48

Вывод.

В данной работе была разработан проект каркаса для работы с параметрами изделий (книг) с настраиваемым списком параметров. Реализация произведена в базе данных PostgreSQL. Проведено тестирование, показывающее корректную работу реализованных функций для работы с данными. Полный код программы можно посмотреть в приложении А.

ПРИЛОЖЕНИЕ А

--Таблица единиц измерения

CREATE TABLE Unit_Of_Measure

(

id_uom serial NOT NULL PRIMARY KEY, --id единицы измерения

short_name_uom text NOT NULL, -- Краткое имя ед.изм.

name_uom text NOT null --Полное имя ед.изм.

)

CREATE TABLE Product_Class

(

id_class serial NOT NULL PRIMARY KEY, --id класса

name_class text NOT NULL, -- Имя класса

parent_class_id integer, --id родителя класса

id_uom integer, -- id ед.изм.

CONSTRAINT id_uom FOREIGN KEY (id_uom)

REFERENCES Unit_Of_Measure (id_uom) MATCH simple --Ограничение: поле может ссылвется на другую таблицу,

--если не равно 0 и в другой таблице должно быть значение, на которое ссылается поле

ON UPDATE NO action --На обновление нет реакции

ON DELETE cascade --На удаление каскадное удаление

)

ALTER TABLE Product_Class ADD CONSTRAINT parent_class_id FOREIGN KEY (parent_class_id)

REFERENCES public.Product_Class (id_class) MATCH SIMPLE

ON UPDATE NO action --На обновление нет реакции

ON DELETE cascade --На удаление каскадное удаление

--Таблица продуктов

CREATE TABLE Product

(

id_product serial NOT NULL PRIMARY KEY, --id продукта

name_product text NOT NULL, -- Имя имя продукта

id_class integer NOT NULL, -- id класса, к которому принадлежит продукт

CONSTRAINT id_class FOREIGN KEY (id_class)

REFERENCES Product_Class (id_class) MATCH SIMPLE

ON UPDATE NO action --На обновление нет реакции

ON DELETE cascade --На удаление каскадное удаление

)

-- Перечисление таблица

CREATE TABLE enumeration

(

id_enum serial NOT NULL, -- ID перечисления

name_enum text NOT NULL, --Имя перечисления

PRIMARY KEY (id_enum)

)

-- Значение перечисления таблица

CREATE TABLE enum_value

(

id_value serial NOT NULL, -- ID значения

num integer NOT NULL, -- Порядковый номмер значения в перечислении

name_value text NOT NULL, --Имя значения

id_enum integer NOT NULL, --ID перечисления

PRIMARY KEY (id_value),

CONSTRAINT id_enum FOREIGN KEY (id_enum)

REFERENCES enumeration(id_enum) MATCH simple -- Ограничение для ссылки только на существующее id

ON UPDATE NO action --На обновление таблицы перечисления нет реакции

ON DELETE cascade -- Если удаляется объект перечисления, то удалятся и все значения, которые на него ссылались

)

create unique index union_num_iden on enum_value(num, id_enum); --Создадим индекс для уникальности пар (num, id_enum)

--Таблица типа параметров

create table parameter_type

(

id_type serial NOT NULL, -- ID типа

name_type text NOT NULL, --Имя типа

PRIMARY KEY (id_type)

)

-- Таблица параметров

create table parameters

(

id_parameter serial not null, --id параметра

name_parameter text not null, --имя параметра

uom_parameter integer not null,-- ссылка на единицы измерения параметра /если числнный тип

id_enum integer not null, -- ссылка на перечисления параметра / если есть перечисление

id_type integer not null, -- ссылка на тип параметра

PRIMARY KEY (id_parameter),

CONSTRAINT id_enum FOREIGN KEY (id_enum)

REFERENCES enumeration(id_enum) MATCH simple -- Ограничение для ссылки только на существующее id

ON UPDATE NO action --На обновление таблицы перечисления нет реакции

ON DELETE cascade -- Если удаляется объект перечисления, то удалятся и все значения, которые на него ссылались

)

ALTER TABLE parameters ADD CONSTRAINT id_type FOREIGN KEY (id_type) --Делаем поля внешними ключами

REFERENCES public.parameter_type (id_type) MATCH SIMPLE

ON UPDATE NO action --На обновление нет реакции

ON DELETE cascade; --На удаление каскадное удаление

ALTER TABLE parameters ADD CONSTRAINT uom_parameter FOREIGN KEY (uom_parameter) --Делаем поля внешними ключами

REFERENCES public.unit_of_measure (id_uom) MATCH SIMPLE

ON UPDATE NO action --На обновление нет реакции

ON DELETE cascade; --На удаление каскадное удаление

alter table parameters alter column id_enum drop not null;

alter table parameters alter column uom_parameter drop not null; -- Исправили ошибку: эти поля могут отаваться пустыми

--Таблица агрегаты

create table aggregate_position

(

id_link serial not null, -- Связь (первичный ключ искусственный)

agg_par integer not null, -- id параметра-агрегата

id_par integer not null, -- id параметра, который принадлежит агрегату

num integer not null, -- позиция этого параметра агрегате

PRIMARY KEY (id_link),

CONSTRAINT agg_par FOREIGN KEY (agg_par)

REFERENCES parameters(id_parameter) MATCH simple -- Ограничение для ссылки только на существующее id

ON UPDATE NO action --На обновление таблицы перечисления нет реакции

ON DELETE cascade -- Если удаляется объект перечисления, то удалятся и все значения, которые на него ссылались

)

ALTER TABLE aggregate_position ADD CONSTRAINT id_par FOREIGN KEY (id_par)

REFERENCES parameters(id_parameter) MATCH simple -- Ограничение для ссылки только на существующее id

ON UPDATE NO action --На обновление таблицы перечисления нет реакции

ON DELETE cascade -- Если удаляется объект перечисления, то удалятся и все значения, которые на него ссылались

create unique index unique_aggPar_idPar on aggregate_position(agg_par, id_par); --Создадим индекс для уникальности пар (agg_par, id_par)

create unique index unique_aggPar_num on aggregate_position(agg_par, num); --Создадим индекс для уникальности пар (agg_par, num)

--Таблица параметров класса

create table class_parameters

(

id_link serial not null,-- Связь (искусственный первичный ключ)

id_par integer not null, -- id парметра

id_class integer not null, -- id класса

maximum integer default null, --максимум для данного параметра

minimum integer default null, --минимумм для данного параметра

primary key(id_link),

constraint id_par foreign key(id_par)

references parameters(id_parameter) match simple -- Ограничение для ссылки только на существующее id

on update no action --На обновление таблицы перечисления нет реакции

on delete cascade -- Если удаляется объект перечисления, то удалятся и все значения, которые на него ссылались

)

ALTER TABLE class_parameters ADD CONSTRAINT id_class FOREIGN KEY (id_class)

REFERENCES product_class(id_class) MATCH simple -- Ограничение для ссылки только на существующее id

ON UPDATE NO action --На обновление таблицы перечисления нет реакции

ON DELETE cascade; -- Если удаляется объект перечисления, то удалятся и все значения, которые на него ссылались

create unique index unique_idPar_idClass on class_parameters(id_par, id_class); -- индекс для указанных полей, так как pk - искусственный

-- Таблица параметров продукта

create table product_parameters

(

id_link serial not null, -- связь(искусствнный первичный ключ)

id_par integer not null, --id параметра

id_prod integer not null, -- id продукта

value integer default null, --значение числовое

id_enum_value integer default null, --сслыка, если тип - перечисление

num_agg integer default null, -- порядковый номер параметра в агрегате, если это часть агрегата

primary key(id_link),

constraint id_par foreign key(id_par)

references parameters(id_parameter) match simple -- Ограничение для ссылки только на существующее id

on update no action --На обновление таблицы перечисления нет реакции