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

ЗАДАНИЕ 1.2. Приемы моделирования Перечислений / ЗАДАНИЕ 1.2. Приемы моделирования Перечислений

.docx
Скачиваний:
7
Добавлен:
31.05.2023
Размер:
266.05 Кб
Скачать

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

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

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

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

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

ДОМАШНЯЯ РАБОТА

по дисциплине «Методы и средства проектирования информационных систем»

Тема: Задание 1.2. Приемы моделирования Перечислений

Студенты:

Группа

ФИО

Подпись исп.

Оценка

Подпись преп.

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

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

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

2023

ДОМАШНЕЕ ЗАДАНИЕ

Тема работы : Задание 1.2. Приемы моделирования Перечислений

Требования

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

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

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

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

Создание нового перечисления;

Редактирование списка значений перечисления;

Изменение порядка расположения позиций в списке значений;

Вывод значений перечисления;

Вывод перечислений;

Выбор значения перечисления.

1.2. Содержание работы

1.  Провести анализ фрагментов предметной области, связанной с поддержанием сервисов работы со справочниками изделий с представлением примеров справочников и моделей классов этапа анализа.

2.Сформировать требования к частям проекта применительно к заданиям 1.0 —  1.3 с обязательным представлением диаграмм  вариантов использования

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

4.Разработать модели хранения данных с представлением диаграмм Сущность-Связь и описанием введенных сущностей, атрибутов и связей. Создать БД и занести необходимые метаданные

5.Разработать и описать необходимый набор SQL-процедур, обеспечивающий поддержку описанных выше требований.

6.Выбрать представительный пример фрагмента справочника.

​​​​​​​7.Выполнить тестирование  работоспособности реализованного фрагмента  проекта с протоколированием результатов.

8.Оформить все материалы в виде отчетов по заданиям 1 — 3. Возможно представить один общий отчет.

9.Отчет представить в виде файла *.docx

10.Продемонстрировать работоспособность разработанного фрагмента приложения.

Этап выполнения

Результат

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

Содержательное описание исходных данных. Модель классов предметной области.

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

Диаграммы вариантов использования. Описание компонентов диаграмм

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

Диаграммы классов с операциями и атрибутами. Описание компонентов диаграмм.

Разработать модель хранения в среде СУБД данных об изделиях

Диаграммы ER. Скрипты метаданных с комментариями.

Разработать основные SQL-процедуры для работы со справочником

Скрипты SQL-процедур с комментариями.

Тестирование процедур

Описание тестов. Скрипты исходных данных для тестов.

Скриншоты результатов тестирования.

1.3. Исходные данные для задачи

Примеры перечислений согласовать с преподавателем (Файл Бланки Заказа.rar).

1.4. Рекомендуемые инструменты

Редактор StarUML

Редактор Visio. Модель Database.Entity relationship

Текстовый редактор Word

1.5. Рекомендуемые источники

1. Data Definition Guide : файл DataDef.pdf

2. Language Reference Guide: файл LangRef.pdf

3. Информационное обеспечение жизненного цикла изделий. Учебное пособие: СПб, Издательство Политехнического университета, 2012

4. Приемы объектно-ориентированного проектирования. Паттерны проектирования: Изд-во «ПИТЕР», 2008

5. Проектирование корпоративных информационных систем.: СПб, Изд-во СПбГЭТУ «ЛЭТИ», 2013

6. В.А.Дубенецкий, А.Г. Кузнецов Использование объектных моделей при создании информационных систем: учебно-методическое пособие. СПбГЭТУ «ЛЭТИ», 2016. 220 с.

7. В.А.Дубенецкий, А.Г. Кузнецов Проектирование информационных систем с использованием UML: учебно-методическое пособие. СПбГЭТУ «ЛЭТИ», 2016. 62 с.

Содержание пояснительной записки:

«Анализ предметной обрасти», «Разработка объектной модели этапа проектирования», «Разработка модели хранения», «Разработка основных процедур», поддерживающих работы с перечислениями, «Результаты тестирования», «Вывод»

Предполагаемый объем пояснительной записки:

Не менее 15 страниц.

Дата выдачи задания:

Дата сдачи отчета: 19.05.20023

Дата защиты работы: 19.05.2023

Студенты:

Группа

ФИО

Подпись исп.

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

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

Оглавление

1. Описание выполненной работы 7

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

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

1.3. Разработка модели классов 8

1.4. Разработка модели хранения в среде СУБД данных классификатора изделий 8

1.5. Разработка основных процедур 9

1.6. Тестирование разработки 13

Выводы 15

1. Описание выполненной работы

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

Для разработки концептуального проекта будем использовать редактор StarUML и опишем классификатор объекта Перечисления. Перечисления (enum) – в программировании тип данных, чьё множество значений представляет собой ограниченный список идентификаторов. Например, цвета радуги можно представить с помощью перечислений следующим образом: 1-красный, 2-оранжевый, 3-желтый и т.д.

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

В директории UseCase Model создадим диаграмму вариантов использования.

Рис. 1. Диаграмма ВИ для задачи Работа с классификатором

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

Модель классов для ВИ Работа с перечислениями:

Рис. 2. Модель классов для ВИ Работа с перечислениями

1.4. Разработка модели хранения в среде СУБД данных классификатора изделий

Первоначально опишем модель хранения в виде ERD:

Рис. 3. ERD для задачи Работа с классификатором изделий

Для каждой сущности создаем таблицы с описанием полей:

CREATE TABLE ENUM(

ID_ENUM SERIAL PRIMARY KEY,

NAME VARCHAR(50) UNIQUE,

SHORT_NAME VARCHAR(10)

);

CREATE TABLE ENUM_VALUE(

ID_VALUE SERIAL PRIMARY KEY,

ID_ENUM INTEGER,

VALUE INTEGER NOT NULL,

NAME VARCHAR(50) NOT NULL,

SHORT_NAME VARCHAR(10),

FOREIGN KEY (ID_ENUM) REFERENCES ENUM(ID_ENUM) ON DELETE CASCADE

);

1.5. Разработка основных процедур

CREATE OR REPLACE FUNCTION get_enum_id(enum_name VARCHAR(50))

/*функция: Формирует возвращает id перечисления из таблицы ENUM

вход:enum_name - ид. продукта

выход: значение id_enum

эффекты: */

returns INTEGER

AS

$$

BEGIN

return (select id_enum from enum

WHERE ENUM.NAME = enum_name);

END

$$

LANGUAGE plpgsql;

CREATE OR REPLACE FUNCTION get_enum_min_value(enum_name VARCHAR(50))

/*функция: Возвращает минимальное value из таблицы ENUM_VALUE для заданнаого перечисления

вход: enum_name - название перечисления

выход: минимальное значение value

эффекты: */

returns INTEGER

as

$$

DECLARE

ENUM_ID INTEGER;

RESULT INTEGER;

begin

SELECT * FROM get_enum_id(enum_name) INTO ENUM_ID;

SELECT MIN(enum_value.value)

FROM enum_value

WHERE enum_value.id_enum = 1 INTO RESULT;

IF RESULT IS NULL THEN RETURN 0;

ELSE

RETURN RESULT;

END IF;

end;

$$

LANGUAGE plpgsql;

CREATE OR REPLACE FUNCTION get_enum_numbers(enum_name VARCHAR(50))

returns TABLE(VALUE INTEGER)

/*функция: Возвращает список всех значений value из таблицы ENUM_VALUE

для заданнаого перечисления.

вход: enum_name - название перечисления

выход: столбец value

эффекты: */

as

$$

declare

enum_id INTEGER;

begin

SELECT * FROM get_enum_id(enum_name) INTO enum_id;

RETURN QUERY

SELECT ENUM_VALUE.VALUE FROM ENUM_VALUE

WHERE ENUM_VALUE.id_enum = enum_id;

end;

$$

LANGUAGE plpgsql;

CREATE OR REPLACE FUNCTION get_enum_val_number(en_name VARCHAR(50))

returns INTEGER

/*функция: Возвращает значение value для конкретного значения перечисления.

вход: en_name - название значения перечисления

выход: числовое значение value

эффекты: */

as

$$

begin

RETURN(

SELECT VALUE FROM ENUM_VALUE

WHERE ENUM_VALUE.name = en_name);

end;

$$

LANGUAGE plpgsql;

CREATE OR REPLACE FUNCTION get_enum_list(enum_name VARCHAR(50))

/*функция: Возвращает все значения указанного перечисления.

вход: enun_name - название перечисления

выход: список значений

эффекты: */

RETURNS TABLE(

ID_VALUE INTEGER,

ID_ENUM INTEGER,

VALUE INTEGER,

NAME VARCHAR(50),

SHORT_NAME VARCHAR(10)

)

AS

$$

DECLARE

ENUM_ID INTEGER;

BEGIN

SELECT * FROM get_enum_id(enum_name) INTO ENUM_ID;

RETURN QUERY

SELECT * FROM enum_value

WHERE enum_value.id_enum = ENUM_ID

ORDER BY VALUE;

end;

$$

LANGUAGE plpgsql;

CREATE OR REPLACE FUNCTION ins_enum_value(num INTEGER, enum_val_name VARCHAR(50), en_val_short_name VARCHAR(10), enum_name VARCHAR(50))

returns VARCHAR(30)

/*функция: Добавление нового значения заданного перечисления.

вход: num - номер нового значения,

enun_val_name - название значения перечисления,

en_val_short_name - короткое название,

enum_name - название перечисления.

выход: сообщение об успехе/неуспехе операции

эффекты: */

as

$$

DECLARE

ENUM_ID INTEGER;

begin

if num is null then

SELECT * FROM get_enum_min_value(enum_name) INTO num;

WHILE num in (SELECT * FROM get_enum_numbers(enum_name)) LOOP

num = num + 1;

end loop;

end if;

SELECT * FROM get_enum_id(enum_name) INTO ENUM_ID;

IF num in (SELECT * FROM get_enum_numbers(enum_name)) then

RETURN 'This value already exists!';

end if;

IF enum_val_name in (SELECT NAME FROM get_enum_list(enum_name)) then

RETURN 'This name already exists!';

end if;

INSERT INTO enum_value(ID_ENUM, VALUE, NAME, SHORT_NAME)

VALUES(ENUM_ID, num, enum_val_name, en_val_short_name);

RETURN 'Done!';

end;

$$

LANGUAGE plpgsql;

CREATE OR REPLACE FUNCTION change_number_postion(enum_val_name VARCHAR(30), new_number INTEGER, class_name VARCHAR(30))

/*функция: Изменение параметра value значения перечисления.

вход: new_number - новое значение,

enun_val_name - название значения перечисления,

class_name - название перечисления

выход: сообщение об успехе/неуспехе операции

эффекты: */

RETURNS VARCHAR(30)

AS

$$

DECLARE

ENUM_ID INTEGER;

BEGIN

SELECT * FROM get_enum_id(class_name) INTO ENUM_ID;

--Проверка на то, что такого значения в таблице еще нет.

IF new_number in (SELECT * FROM get_enum_numbers(class_name)) then

RETURN 'This value already exists!';

ELSE

UPDATE ENUM_VALUE

SET value = new_number

WHERE name = enum_val_name AND ENUM_ID = enum_value.id_enum;

RETURN 'Done!';

end if;

end;

$$

LANGUAGE plpgsql

1.6. Тестирование разработки

/*******Заполнение списка перечислений********************/

INSERT INTO ENUM(NAME, SHORT_NAME) VALUES('Цвета радуги', NULL);

SELECT * FROM ins_enum_value(NULL, 'Красный', NULL, 'Цвета радуги');

SELECT * FROM ins_enum_value(NULL, 'Оранжевый', NULL, 'Цвета радуги');

SELECT * FROM ins_enum_value(3, 'Желтый', NULL, 'Цвета радуги');

SELECT * FROM ins_enum_value(5, 'Зеленый', NULL, 'Цвета радуги');

SELECT * FROM ins_enum_value(NULL, 'Голубой', NULL, 'Цвета радуги');

SELECT * FROM ins_enum_value(NULL, 'Сидит', NULL, 'Цвета радуги');

SELECT * FROM ins_enum_value(3, 'Баклан', NULL, 'Цвета радуги');

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

SELECT * FROM get_enum_list('Цвета радуги');

Рис. 4 - Вывод списка перечисления

Изменение параметра value у значения перечисления:

SELECT * FROM change_number_postion('Зеленый', 8,'Цвета радуги');

Рис. 5 – Изменение значения перечисления на 5 для цвета Зеленый

Выводы

1. Процедуры поддержки целостности данных работают корректно.

2. Процедуры добавления данных работают корректно.

3. Процедура поиска значений заданного перечисления работает корректно.

4. Процедура изменения числового значения для перечисления работает корректно.

15