Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ПЗ-пример.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
537.09 Кб
Скачать

5.4 Вывод

В результате проектирования глобальной реляционной модели, соответствующей глобальной ER-модели, получены спецификации, задающие 17 сущностей-таблиц. Разработанные спецификации ограничений и операционных правил включают все ограничения и правила, полученные на предыдущем этапе и трансформированные для реляционной модели; дополнительно на данном этапе введено 0 ограничений и 6 правил.

6 Проектирование моделей отображения

Данный раздел, являющийся заключительным этапом проектирования концептуальных моделей базы данных, посвящен разработке моделей отображения, связывающих глобальную реляционную модель (разработанную на этапе 5) с внешними иерархическими моделями (разработанными на этапе 2). Сначала разрабатываются иерархии представлений, соответствующие внешним моделям, а затем прорабатывается внутренняя структура отдельных представлений, входящих в состав иерархий. Результаты проектирования приведены в документе 2012.654600.БД.КР.52.МО «Модели отображения».

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

В данном подразделе разрабатываются иерархии представлений (виртуальных сущностей), соответствующие внешним моделям. Для каждой внешней иерархической модели строится соответствующая эквивалентная иерархия представлений. Корню иерархии соответствует сущность внешней модели, а узлам — многозначные агрегаты или атрибуты.

6.1.1 Функция 1 «Учет кадров»

Иерархия представлений для этой функции включает 4 представления, организованных в виде 3-уровневой древовидной структуры. Корневое представление «vПрием заказов» имеет потомка: «vСостав заказа», которому в качестве параметра с вышестоящего уровня передается атрибут «Рег. номер заказа».

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

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

6.2.1 Функция 1 «Учет кадров»

Корневое представление «vПрием заказов» строится путем эквисоединения сущностей «Персона» и «Заказчик» по атрибуту «Код персоны», «Персона» и «Приемщик» по атрибуту «Код персоны», Виртуальные атрибуты в этом представлении не предусмотрены.

Представление второго уровня иерархии «vСостав заказа» строится путем эквисоединения сущностей «Справочник» и «Прием заказов*Состав заказа» по атрибутам «Тип» и «Код». Виртуальные атрибуты в этом представлении не предусмотрены.

6.3 Вывод

В результате разработки моделей отображения, связывающих глобальную реляционную модель (разработанную на этапе 5) с внешними иерархическими моделями (разработанными на этапе 2), получены три иерархии представлений, соответствующие трем внешним моделям. В ходе дальнейшей проработки получена внутренняя структура отдельных представлений, входящих в состав иерархий, представляющая собой эквисоединение от 2 до 5 нормализованных таблиц внутренней реляционной модели.

  1. SQL-код создания базы данных

CREATE DATABASE data;

USE data;

CREATE TABLE ПриемЗаказов

(

РегНомерЗаказа INT NOT NULL,

ДатаЗаказа DATETIME NOT NULL,

СрокИсполнения DATETIME NOT NULL,

ТипДокумента VARCHAR(20) NOT NULL,

КодДокумента INT NOT NULL,

КодПриемщика INT NOT NULL,

КодЗаказчика INT NOT NULL

);

CREATE TABLE Персона

(

КодПерсоны INT NOT NULL,

ФИО VARCHAR(50) NOT NULL

);

CREATE TABLE ПроектированиеРекламы

(

РегНомерЗаказа INT NOT NULL,

РегНомерПроекта INT NOT NULL,

НазваниеПроекта VARCHAR(50) NOT NULL

);

CREATE TABLE ПроектированиеРекламы_ПродуктПроекта

(

РегНомерЗаказа INT NOT NULL,

НппПродукта INT NOT NULL,

РегНомерПродукта INT NOT NULL,

РегНомерПроекта INT NOT NULL

);

CREATE TABLE ПроектированиеРекламы_ИсполнительПроекта

(

РегНомерЗаказа INT NOT NULL,

НппИсполнителя INT NOT NULL,

РегНомерПроекта INT NOT NULL,

КодИсполнителя INT NOT NULL,

РегНомерПродукта INT NOT NULL

);

CREATE TABLE Справочник

(

Тип VARCHAR(20) NOT NULL, Код INT NOT NULL,

Название VARCHAR(20) NOT NULL );

CREATE TABLE Продукт

(

РегНомерПродукта INT NOT NULL,

ОсобенностиПродукта TEXT NOT NULL,

ТипВидаПродукта VARCHAR(20) NOT NULL,

КодВидаПродукта INT NOT NULL

);

CREATE TABLE Место

(

РегНомерЗаказа INT NOT NULL,

РегНомерДоговораАрендыМеста INT NOT NULL,

РегНомерРазмещения INT NOT NULL,

КодМеста INT NOT NULL,

НазваниеМеста VARCHAR(20) NOT NULL,

РасположениеМеста VARCHAR(20) NOT NULL

);

CREATE TABLE ДоговорАренды

(

РегНомерДоговораАрендыМеста INT NOT NULL,

ДатаДоговораАрендыМеста DATETIME NOT NULL,

ДатаНачалаАренды DATETIME NOT NULL,

ДатаОкончанияАренды DATETIME NOT NULL

);

CREATE TABLE РазмещениеРекламы

(

РегНомерЗаказа INT NOT NULL,

РегНомерРазмещения INT NOT NULL,

Статус VARCHAR(20) NOT NULL,

КодИсполнителя INT NOT NULL

);

CREATE TABLE ПриемЗаказов_СоставЗаказа

(

РегНомерЗаказа INT NOT NULL,

НппУслуги INT NOT NULL,

ОбъемУслуги INT NOT NULL,

ТипУслуги VARCHAR(20) NOT NULL,

КодУслуги INT NOT NULL

);

CREATE TABLE ПрП_РаботаПоИзготовлениюПродукта

(

РегНомерЗаказа INT NOT NULL,

НппРаботы INT NOT NULL,

НппПродукта INT NOT NULL,

ТипВидаРаботы VARCHAR(20) NOT NULL,

КодВидаРаботы INT NOT NULL,

РегНомерПродукта INT NOT NULL,

РегНомерПроекта INT NOT NULL

);

CREATE TABLE РаботаПоИзготовлениюПродукта_РасходРесурса

(

РегНомерЗаказа INT NOT NULL,

НппРаботы INT NOT NULL,

НппПродукта INT NOT NULL,

НппРесурса INT NOT NULL,

Количество INT NOT NULL,

ТипРесурса VARCHAR(20) NOT NULL,

КодРесурса INT NOT NULL

);

CREATE TABLE РазмещениеРекламы_РазмещаемыйПродукт

(

РегНомерЗаказа INT NOT NULL,

РегНомерРазмещения INT NOT NULL,

НппПродуктаНаМесте INT NOT NULL,

РегНомерПродукта INT NOT NULL

);

ALTER TABLE ПриемЗаказов

ADD CONSTRAINT PK_ПриемЗаказов

PRIMARY KEY(РегНомерЗаказа);

ALTER TABLE Персона

ADD CONSTRAINT PK_Персона

PRIMARY KEY(КодПерсоны);

ALTER TABLE ПроектированиеРекламы

ADD CONSTRAINT PK_ПроектированиеРекламы

PRIMARY KEY(РегНомерЗаказа,РегНомерПроекта);

ALTER TABLE ПроектированиеРекламы_ПродуктПроекта

ADD CONSTRAINT PK_ПроектированиеРекламы_ПродуктПроекта

PRIMARY KEY(РегНомерЗаказа,НппПродукта,РегНомерПродукта,РегНомерПроекта);

ALTER TABLE ПроектированиеРекламы_ИсполнительПроекта

ADD CONSTRAINT PK_ПроектированиеРекламы_ИсполнительПроекта

PRIMARY KEY(РегНомерЗаказа,НппИсполнителя,РегНомерПроекта);

ALTER TABLE Справочник

ADD CONSTRAINT PK_Справочник

PRIMARY KEY(Тип,Код);

ALTER TABLE Продукт

ADD CONSTRAINT PK_Продукт

PRIMARY KEY(РегНомерПродукта);

ALTER TABLE Место

ADD CONSTRAINT PK_Место

PRIMARY KEY(РегНомерЗаказа,РегНомерДоговораАрендыМеста,РегНомерРазмещения,КодМеста);

ALTER TABLE ДоговорАренды

ADD CONSTRAINT PK_ДоговорАренды

PRIMARY KEY(РегНомерДоговораАрендыМеста);

ALTER TABLE РазмещениеРекламы

ADD CONSTRAINT PK_РазмещениеРекламы

PRIMARY KEY(РегНомерЗаказа,РегНомерРазмещения);

ALTER TABLE ПриемЗаказов_СоставЗаказа

ADD CONSTRAINT PK_ПриемЗаказов_СоставЗаказа

PRIMARY KEY(РегНомерЗаказа,НппУслуги);

ALTER TABLE ПрП_РаботаПоИзготовлениюПродукта

ADD CONSTRAINT PK_ПрП_РаботаПоИзготовлениюПродукта

PRIMARY KEY(РегНомерЗаказа,НппРаботы,НппПродукта);

ALTER TABLE РаботаПоИзготовлениюПродукта_РасходРесурса

ADD CONSTRAINT PK_РаботаПоИзготовлениюПродукта_РасходРесурса

PRIMARY KEY(РегНомерЗаказа,НппРаботы,НппПродукта,НппРесурса);

ALTER TABLE РазмещениеРекламы_РазмещаемыйПродукт

ADD CONSTRAINT PK_РазмещениеРекламы_РазмещаемыйПродукт

PRIMARY KEY(РегНомерЗаказа,РегНомерРазмещения,НппПродуктаНаМесте);

ALTER TABLE ПриемЗаказов

ADD CONSTRAINT FK_Документ

FOREIGN KEY (ТипДокумента,КодДокумента)

REFERENCES Справочник(Тип,Код)

ON UPDATE CASCADE

ON DELETE CASCADE;

ALTER TABLE ПриемЗаказов

ADD CONSTRAINT FK_Приемщик

FOREIGN KEY (КодПриемщика)

REFERENCES Персона (КодПерсоны)

ON UPDATE CASCADE

ON DELETE CASCADE;

ALTER TABLE ПриемЗаказов

ADD CONSTRAINT FK_Заказчик

FOREIGN KEY (КодЗаказчика)

REFERENCES Персона (КодПерсоны)

ON UPDATE NO ACTION

ON DELETE NO ACTION;

ALTER TABLE ПроектированиеРекламы

ADD CONSTRAINT FK_Заказ4

FOREIGN KEY (РегНомерЗаказа)

REFERENCES ПриемЗаказов (РегНомерЗаказа)

ON UPDATE CASCADE

ON DELETE CASCADE;

ALTER TABLE ПроектированиеРекламы_ИсполнительПроекта

ADD CONSTRAINT FK_Проект

FOREIGN KEY (РегНомерЗаказа, РегНомерПроекта)

REFERENCES ПроектированиеРекламы (РегНомерЗаказа, РегНомерПроекта)

ON UPDATE CASCADE

ON DELETE CASCADE;

ALTER TABLE ПроектированиеРекламы_ИсполнительПроекта

ADD CONSTRAINT FK_Исполнитель

FOREIGN KEY (КодИсполнителя)

REFERENCES Персона (КодПерсоны)

ON UPDATE NO ACTION

ON DELETE NO ACTION;

ALTER TABLE ПроектированиеРекламы_ПродуктПроекта

ADD CONSTRAINT FK_Проект2

FOREIGN KEY (РегНомерЗаказа, РегНомерПроекта)

REFERENCES ПроектированиеРекламы

(РегНомерЗаказа, РегНомерПроекта)

ON UPDATE CASCADE

ON DELETE CASCADE;

ALTER TABLE ПроектированиеРекламы_ПродуктПроекта

ADD CONSTRAINT FK_Продукт

FOREIGN KEY (РегНомерПродукта)

REFERENCES Продукт (РегНомерПродукта)

ON UPDATE CASCADE

ON DELETE CASCADE;

ALTER TABLE Продукт

ADD CONSTRAINT FK_Продукт2

FOREIGN KEY (ТипВидаПродукта,КодВидаПродукта)

REFERENCES Справочник (Тип,Код)

ON UPDATE NO ACTION

ON DELETE NO ACTION;

ALTER TABLE Место

ADD CONSTRAINT FK_Размещение

FOREIGN KEY (РегНомерЗаказа,РегНомерРазмещения)

REFERENCES РазмещениеРекламы

(РегНомерЗаказа,РегНомерРазмещения)

ON UPDATE CASCADE

ON DELETE CASCADE;

ALTER TABLE Место

ADD CONSTRAINT FK_ДоговорАренды

FOREIGN KEY (РегНомерДоговораАрендыМеста)

REFERENCES ДоговорАренды (РегНомерДоговораАрендыМеста)

ON UPDATE CASCADE

ON DELETE CASCADE;

ALTER TABLE РазмещениеРекламы

ADD CONSTRAINT FK_Исполнитель2

FOREIGN KEY (КодИсполнителя)

REFERENCES Персона (КодПерсоны)

ON UPDATE CASCADE

ON DELETE CASCADE;

ALTER TABLE РазмещениеРекламы

ADD CONSTRAINT FK_Заказ

FOREIGN KEY (РегНомерЗаказа)

REFERENCES ПриемЗаказов (РегНомерЗаказа)

ON UPDATE NO ACTION

ON DELETE NO ACTION;

ALTER TABLE ПриемЗаказов_СоставЗаказа

ADD CONSTRAINT FK_Услуга

FOREIGN KEY (ТипУслуги,КодУслуги)

REFERENCES Справочник (Тип,Код)

ON UPDATE CASCADE

ON DELETE CASCADE;

ALTER TABLE ПриемЗаказов_СоставЗаказа

ADD CONSTRAINT FK_Заказ2

FOREIGN KEY (РегНомерЗаказа)

REFERENCES ПриемЗаказов (РегНомерЗаказа)

ON UPDATE NO ACTION

ON DELETE NO ACTION;

ALTER TABLE ПрП_РаботаПоИзготовлениюПродукта

ADD CONSTRAINT FK_Работа

FOREIGN KEY (ТипВидаРаботы, КодВидаРаботы)

REFERENCES Справочник (Тип, Код)

ON UPDATE CASCADE

ON DELETE CASCADE;

ALTER TABLE ПрП_РаботаПоИзготовлениюПродукта

ADD CONSTRAINT FK_Продукт3

FOREIGN KEY

(РегНомерЗаказа,НппПродукта,РегНомерПродукта,РегНомерПроекта)

REFERENCES ПроектированиеРекламы_ПродуктПроекта

(РегНомерЗаказа,НппПродукта,РегНомерПродукта,РегНомерПроекта)

ON UPDATE NO ACTION

ON DELETE NO ACTION;

ALTER TABLE РаботаПоИзготовлениюПродукта_РасходРесурса

ADD CONSTRAINT FK_Ресурс

FOREIGN KEY (ТипРесурса, КодРесурса)

REFERENCES Справочник (Тип, Код)

ON UPDATE CASCADE

ON DELETE CASCADE;

ALTER TABLE РаботаПоИзготовлениюПродукта_РасходРесурса

ADD CONSTRAINT FK_Заказ3

FOREIGN KEY (РегНомерЗаказа,НппРаботы,НппПродукта)

REFERENCES ПрП_РаботаПоИзготовлениюПродукта

(РегНомерЗаказа,НппРаботы,НппПродукта)

ON UPDATE NO ACTION

ON DELETE NO ACTION;

ALTER TABLE РазмещениеРекламы_РазмещаемыйПродукт

ADD CONSTRAINT FK_Размещение2

FOREIGN KEY (РегНомерЗаказа,РегНомерРазмещения)

REFERENCES РазмещениеРекламы

(РегНомерЗаказа,РегНомерРазмещения)

ON UPDATE CASCADE

ON DELETE CASCADE;

ALTER TABLE РазмещениеРекламы_РазмещаемыйПродукт

ADD CONSTRAINT FK_Продукт4

FOREIGN KEY (РегНомерПродукта)

REFERENCES Продукт (РегНомерПродукта)

ON UPDATE CASCADE

ON DELETE CASCADE;

ALTER TABLE Персона

ADD DEFAULT 000000 FOR КодПерсоны;

ALTER TABLE Справочник

ADD DEFAULT 0000 FOR Код;

ALTER TABLE РаботаПоИзготовлениюПродукта_РасходРесурса

ADD CHECK (Количество > 0);

ALTER TABLE Место

ADD UNIQUE (НазваниеМеста)

  1. SQL-код заполнения базы данных тестовыми данными

INSERT Персона (КодПерсоны,ФИО)

VALUES (01, 'Самигуллин А.И.');

INSERT Персона (КодПерсоны,ФИО)

VALUES (02, 'Самигуллина К.И.');

INSERT Персона (КодПерсоны,ФИО)

VALUES (52, 'Маликова Н.Ш.');

INSERT Персона (КодПерсоны,ФИО)

VALUES (53, 'Шайхелисламова Л.Р.');

INSERT Персона (КодПерсоны,ФИО)

VALUES (54, 'Кальметьев Т.Р.');

INSERT Справочник (Тип,Код,Название)

VALUES ('Газета',0000001,'Уфимские Ведомости');

INSERT Справочник (Тип,Код,Название)

VALUES ('Журнал',0000002,'Выбирай');

INSERT Справочник (Тип,Код,Название)

VALUES ('Газета',0000003,'Комсомольская Правда');

INSERT Справочник (Тип,Код,Название)

VALUES ('Сайт',0000004,'Сайт АВИТО');

INSERT Справочник (Тип,Код,Название)

VALUES ('Продвижение',0000005,'Контекстная реклама');

INSERT ДоговорАренды (РегНомерДоговораАрендыМеста,ДатаДоговораАрендыМеста,ДатаНачалаАренды,ДатаОкончанияАренды)

VALUES (12300,2013-11-17,2013-11-18,2013-12-18);

INSERT ПриемЗаказов (РегНомерЗаказа,ДатаЗаказа,СрокИсполнения,ТипДокумента,КодДокумента,КодПриемщика,КодЗаказчика)

VALUES (000001,2013-11-11-15-40-00,2013-12-22-18-30-00,'Газета',0000001,01,52);

INSERT ПриемЗаказов (РегНомерЗаказа,ДатаЗаказа,СрокИсполнения,ТипДокумента,КодДокумента,КодПриемщика,КодЗаказчика)

VALUES (000002,2013-11-11-16-45-00,2013-12-23-09-30-00,'Журнал',0000002,01,53);

INSERT ПриемЗаказов (РегНомерЗаказа,ДатаЗаказа,СрокИсполнения,ТипДокумента,КодДокумента,КодПриемщика,КодЗаказчика)

VALUES (000003,2013-11-12-08-20-00,2013-12-22-18-30-00,'Газета',0000003,01,53);

INSERT ПриемЗаказов (РегНомерЗаказа,ДатаЗаказа,СрокИсполнения,ТипДокумента,КодДокумента,КодПриемщика,КодЗаказчика)

VALUES (000004,2013-11-12-09-35-00,2013-11-20-17-30-00,'Сайт',0000004,02,54);

INSERT РазмещениеРекламы (РегНомерЗаказа,РегНомерРазмещения,Статус,КодИсполнителя)

VALUES (0001,1515,'Размещено',54);

INSERT Место (РегНомерЗаказа,РегНомерДоговораАрендыМеста,РегНомерРазмещения,КодМеста,НазваниеМеста,РасположениеМеста)

VALUES (000001,12300,1515,12400,'Парк','Уфа');

INSERT ПроектированиеРекламы (РегНомерЗаказа,РегНомерПроекта,НазваниеПроекта)

VALUES (000004,00001,'Сайт АВИТО');

INSERT ПроектированиеРекламы (РегНомерЗаказа,РегНомерПроекта,НазваниеПроекта)

VALUES (000002,00002,'Объявление в журнале "Выбирай"');

INSERT Продукт (РегНомерПродукта,ОсобенностиПродукта,ТипВидаПродукта,КодВидаПродукта)

VALUES (1212, 'Премиум-обьявление','Сайт',0000004);

INSERT Продукт (РегНомерПродукта,ОсобенностиПродукта,ТипВидаПродукта,КодВидаПродукта)

VALUES (1213, 'Раздел Фитнесс', 'Журнал', 0000002);

INSERT ПроектированиеРекламы_ПродуктПроекта (РегНомерЗаказа,НппПродукта,РегНомерПродукта,РегНомерПроекта)

VALUES (000004,1,1212,00001);

INSERT ПроектированиеРекламы_ПродуктПроекта (РегНомерЗаказа,НппПродукта,РегНомерПродукта,РегНомерПроекта)

VALUES (000002,2,1213,00002);

INSERT ПроектированиеРекламы_ИсполнительПроекта

(РегНомерЗаказа,НппИсполнителя,РегНомерПроекта,КодИсполнителя,РегНомерПродукта)

VALUES (000004,1,00001,53,1212);

INSERT ПроектированиеРекламы_ИсполнительПроекта

(РегНомерЗаказа,НппИсполнителя,РегНомерПроекта,КодИсполнителя,РегНомерПродукта)

VALUES (000002,2,00002,52,1213);

INSERT РазмещениеРекламы (РегНомерЗаказа,РегНомерРазмещения,Статус,КодИсполнителя)

VALUES (000002,1515,'Размещено',54);

INSERT ПриемЗаказов_СоставЗаказа (РегНомерЗаказа,НппУслуги,ОбъемУслуги,ТипУслуги,КодУслуги)

VALUES (000002,1,15,'Продвижение',0000005);

INSERT ПрП_РаботаПоИзготовлениюПродукта (РегНомерЗаказа,НппРаботы,НппПродукта,ТипВидаРаботы,КодВидаРаботы,РегНомерПродукта,РегНомерПроекта)

VALUES (000002,1,2,'Сайт',0000004,1213,00002);

INSERT РаботаПоИзготовлениюПродукта_РасходРесурса (РегНомерЗаказа,НппРаботы,НппПродукта,НппРесурса,Количество,ТипРесурса,КодРесурса)

VALUES (000002,1,2,1,50,'Журнал',0000002);

  1. SQL-код реализации моделей отображения

CREATE VIEW vПриемЗаказов AS

SELECT Персона.КодПерсоны AS КодЗаказчика, Персона.ФИО AS ФИОЗаказчика,

Персона.КодПерсоны AS КодПриемщика, Персона.ФИО AS ФИОПриемщик

ПриемЗаказов.РегНомерЗаказа,ПриемЗаказов.ДатаЗаказа, ПриемЗаказов.СрокИсполнения

FROM ПриемЗаказов,Персона

INNER JOIN Персона AS З ON (З.КодПерсоны = ПриемЗаказов.КодЗаказчика)

INNER JOIN Персона AS П ON (П.КодПерсоны = ПриемЗаказов.КодПриемщика);

CREATE PROCEDURE pСоставЗаказа

@id INT

AS SELECT [ПриемЗаказов_СоставЗаказа].[НппУслуги], [ПриемЗаказов_СоставЗаказа].[РегНомерЗаказа],

[ПриемЗаказов_СоставЗаказа].[ОбъемУслуги], [Справочник].[Код], [Справочник].[Тип]

FROM ([ПриемЗаказов_СоставЗаказа]

INNER JOIN [Справочник]

ON [Справочник].[Код]= [ПриемЗаказов_СоставЗаказа].[КодУслуги]

AND [Справочник].[Тип]= [ПриемЗаказов_СоставЗаказа].[ТипУслуги])

WHERE ([ПриемЗаказов_СоставЗаказа].[РегНомерЗаказа]=@id);

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]