girniy.ru 1
ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ


Национальный исследовательский университет ресурсоэффективных технологий

Томский Политехнический университет


Институт Кибернетики

Кафедра оптимизации систем управления


Индивидуальное домашнее задание по дисциплине

«Базы данных»

Вариант 16


Разработчик:

Студент группы 8В83

Сафронов Б.А.


Согласовано:

Ассистент

Мокина Е. Е.


Томск 2011

Оглавление


ЗАДАНИЕ 3

Нормализация 4

До нормализации: 4

После нормализации: 5

Кодификаторы 7

Логическая модель 8

Физическая модель 8

Расчет вторичных атрибутов (SQL) 9

Представления: 10

DDL код: 10



ЗАДАНИЕ


В основе предметной области лежит информация о кондитерских, такая как: Название кондитерской, адрес, телефон, день недели, часы работы, возможность принятия заказа. Кондитерские выпускают разные виды продукции, сведения о которых следующие: название продукции, состав, пищевая ценность(Ккал), условия хранения, срок годности. Информация о рецептуре некоторых изделий является открытой и содержит: наименование продукции, ингредиент, единица измерения ингредиента в рецепте, количество ингредиента, выход готовой продукции, единица измерения выхода готовой продукции.

Файл:

Название кондитерской

Кофейня

День недели


Часы работы

Количество столиков

Количество посадочных мест



Отчетность по предметной области содержит следующие документы:


  1. ЗАБОРНЫЙ ЛИСТ От «__»____________________200__г.

Наименование продукта

Срок хранения

Время изготовлен.

Вид упаковки

Стоимость упаковки

Количество

Цена

Сумма

Мираель

36 ч

12:15

К 1500

25

1,76

510

922-6

Ореховое печенье

72 ч

15:00

ПК 2118

15

0,3

400

135

Корзинка

36 ч

17:45

-

-

15

40

600


Нормализация

До нормализации:

Название кондитерской


Кофейня

День недели

Часы работы



Наименование продукта

Срок хранения

Время изготовлен.

Вид упаковки

Стоимость упаковки

Количество

Цена

Сумма



название продукции

состав

пищевая ценность(Ккал)

условия хранения

срок годности



наименование продукции

ингредиент

единица измерения ингредиента в рецепте

количество ингредиента

выход готовой продукции

единица измерения выхода готовой продукции




После нормализации:




Заборный лист:

Дата

id продукта

ИНН кондитерской

id упаковки

Время изготовления

Количество

Качественное удостоверение:

id качественного удостоверения

Дата

Дата выработки

ИНН кондитерской

id продукта

Кондитерская:

ИНН кондитерской

Название кондитерской

id предприятия

Улица

Дом

Телефон

id предпринимателя


Продукт

id продукта

Наименование продукта

Вид продукта

Единица измерения

Пищевая ценность

Масса

Рецептура

id продукта

id ингредиента

Единица измерения ингредиента

Количество ингредиента

Предприниматель:

id предпринимателя

номер\серия паспорта

телефон

отчество

имя

фамилия

Упаковка

id упаковки

вид упаковки

стоимость упаковки


Кафе

id кафе

название

инн кондитерской

улица

дом

телефон

Продукция кондитерской

id продукта

ИНН кондитерской

Технологический стандарт

Цена

График работы

ИНН кондитерской

id день недели

Часы работы

Возможность принятия заказа

Возможность доставки

Технологический стандарт

Технологический стандарт

Срок годности

Условия хранения


Сотрудник

ИНН

Фамилия

Имя

Отчество

Дата рождения

паспорт

Улица

Дом

Квартира

Телефон

должность

смена

з\п

кафе

ИНН кондитерской



Кодификаторы


Ингредиент

id ингредиента

Ингредиент

Смена

id смены

Смена

Должность

Id должности


Должность

День недели

номер

день недели



Логическая модель



Физическая модель





Расчет вторичных атрибутов (SQL)




Название отношения

Вторичный атрибут

Запрос

Заборный лист

Средняя цена

SELECT Company_product.Price, intaking_sheet.quantity

COUNT(Company_product.Price)/intaking_sheet.quantity

FROM Confectioner_shop_production, intaking_sheet ;


Представления:


CREATE VIEW product_n_company_production ( id_product,id_product,Price,product_name )

AS SELECT Product.id_product,Company_production.id_product,Company_production.Price,Product.product_name

FROM Product,Company_production


WHERE Company_production.id_product=Product.id_product;



DDL код:




CREATE TABLE Businessman

(

id_businessman NUMBER NOT NULL ,

Last_name VARCHAR(20) NULL ,

First_name VARCHAR(20) NULL ,

Father_name VARCHAR(20) NULL ,

Phone VARCHAR(20) NULL ,

Pasport_num VARCHAR(20) NULL

);


CREATE UNIQUE INDEX XPKBusinessman ON Businessman

(id_businessman ASC);


ALTER TABLE Businessman

ADD PRIMARY KEY (id_businessman);


CREATE TABLE Cafe

(

id_cafe NUMBER NOT NULL ,

Cafe_name VARCHAR(20) NULL ,

INN_sweetshop VARCHAR(12) NULL ,

Street VARCHAR(20) NULL ,

Building VARCHAR(5) NULL ,

Phonenumber VARCHAR(20) NULL

);


CREATE UNIQUE INDEX XPKCafe ON Cafe

(id_cafe ASC);


ALTER TABLE Cafe

ADD PRIMARY KEY (id_cafe);


CREATE TABLE Change

(

id_change NUMBER NOT NULL ,

change VARCHAR(12) NULL

);


CREATE UNIQUE INDEX XPKChange ON Change

(id_change ASC);


ALTER TABLE Change

ADD PRIMARY KEY (id_change);


CREATE TABLE Company_production

(

id_product NUMBER NOT NULL ,

technological_standart VARCHAR(30) NULL ,

Price NUMBER NULL ,

INN_sweetshop NUMBER NOT NULL ,

Technological_standart VARCHAR(20) NOT NULL

);


CREATE UNIQUE INDEX XPKCompany_production ON Company_production

(id_product ASC,INN_sweetshop ASC);



ALTER TABLE Company_production

ADD PRIMARY KEY (id_product,INN_sweetshop);


CREATE TABLE Component

(

id_component NUMBER NOT NULL ,

Component_name VARCHAR(20) NULL

);


CREATE UNIQUE INDEX XPKComponent ON Component

(id_component ASC);


ALTER TABLE Component

ADD PRIMARY KEY (id_component);


CREATE TABLE Compounding

(

id_product NUMBER NOT NULL ,

id_component NUMBER NOT NULL ,

Units VARCHAR(6) NULL ,

Quantity NUMBER NULL

);


CREATE UNIQUE INDEX XPKCompounding ON Compounding

(id_product ASC,id_component ASC);


ALTER TABLE Compounding

ADD PRIMARY KEY (id_product,id_component);


CREATE TABLE day_week

(

id_day NUMBER(1) NOT NULL ,

day_week VARCHAR(20) NULL

);


CREATE UNIQUE INDEX XPKday_week ON day_week

(id_day ASC);


ALTER TABLE day_week

ADD PRIMARY KEY (id_day);


CREATE TABLE Employee

(

INN CHAR(18) NOT NULL ,

Last_name VARCHAR(20) NULL ,

First_name VARCHAR(20) NULL ,

Father_name VARCHAR(20) NULL ,

Birthday DATE NULL ,

passport_num VARCHAR(20) NULL ,

Street VARCHAR(20) NULL ,

Building VARCHAR(5) NULL ,

Apartment VARCHAR(5) NULL ,

Phone VARCHAR(20) NULL ,

id_post NUMBER NOT NULL ,

ip_change NUMBER NULL ,

Salary NUMBER NULL ,

id_cafe NUMBER NOT NULL ,

INN_sweetshop NUMBER NOT NULL ,

id_change NUMBER NOT NULL

);


CREATE UNIQUE INDEX XPKEmployee ON Employee

(INN ASC);

ALTER TABLE Employee


ADD PRIMARY KEY (INN);


CREATE TABLE Intaking_sheet

(

id_pack NUMBER NOT NULL ,

date DATE NOT NULL ,

id_product NUMBER NOT NULL ,

INN_sweetshop NUMBER NOT NULL ,

time TIMESTAMP NULL ,

quantity NUMBER NULL

);


CREATE UNIQUE INDEX XPKIntaking_sheet ON Intaking_sheet

(id_pack ASC,date ASC,id_product ASC,INN_sweetshop ASC);


ALTER TABLE Intaking_sheet

ADD PRIMARY KEY (id_pack,date,id_product,INN_sweetshop);


CREATE TABLE Pack

(

id_pack NUMBER NOT NULL ,

Pack_type VARCHAR(20) NULL ,

Pack_cost NUMBER NULL

);


CREATE UNIQUE INDEX XPKPack ON Pack

(id_pack ASC);


ALTER TABLE Pack

ADD PRIMARY KEY (id_pack);


CREATE TABLE post

(

id_post NUMBER NOT NULL ,

post VARCHAR(20) NULL

);


CREATE UNIQUE INDEX XPKpost ON post

(id_post ASC);


ALTER TABLE post

ADD PRIMARY KEY (id_post);


CREATE TABLE Product

(

id_product NUMBER NOT NULL ,

product_name VARCHAR(40) NULL ,

product_type VARCHAR(40) NULL ,

product_value NUMBER NULL ,

Units VARCHAR(5) NULL ,

Weight NUMBER NULL

);


CREATE UNIQUE INDEX XPKProduct ON Product

(id_product ASC);


ALTER TABLE Product

ADD PRIMARY KEY (id_product);


CREATE TABLE sertificate_of_qualitative

(

sertificate_number VARCHAR(20) NOT NULL ,

date DATE NULL ,

develop_date DATE NULL ,

id_product NUMBER NOT NULL ,

INN_sweetshop NUMBER NOT NULL

);


CREATE UNIQUE INDEX XPKsertificate_of_qualitative ON sertificate_of_qualitative

(sertificate_number ASC);


ALTER TABLE sertificate_of_qualitative

ADD PRIMARY KEY (sertificate_number);


CREATE TABLE sweetshop

(

INN_sweetshop NUMBER NOT NULL ,

name VARCHAR(20) NULL ,

id_businessman NUMBER NOT NULL ,

street VARCHAR(20) NULL ,

building VARCHAR(5) NULL ,

Phone VARCHAR(20) NULL

);


CREATE UNIQUE INDEX XPKsweetshop ON sweetshop

(INN_sweetshop ASC);


ALTER TABLE sweetshop

ADD PRIMARY KEY (INN_sweetshop);


CREATE TABLE Technological_standart

(

lifetime NUMBER NOT NULL ,

storage_conditions NUMBER NOT NULL ,

Technological_standart VARCHAR(20) NOT NULL

);


CREATE UNIQUE INDEX XPKTechnological_standart ON Technological_standart

(Technological_standart ASC);


ALTER TABLE Technological_standart

ADD PRIMARY KEY (Technological_standart);


CREATE TABLE work_schedule

(

INN_sweetshop VARCHAR(12) NOT NULL ,

id_day NUMBER(1) NOT NULL ,

hours VARCHAR(20) NULL ,

order_possibility BFILE NULL ,

delivery_possibility BFILE NULL

);


CREATE UNIQUE INDEX XPKwork_schedule ON work_schedule

(INN_sweetshop ASC,id_day ASC);


ALTER TABLE work_schedule

ADD PRIMARY KEY (INN_sweetshop,id_day);


CREATE VIEW product_n_company_production ( id_product,id_product,Price,product_name )

AS SELECT Product.id_product,Company_production.id_product,Company_production.Price,Product.product_name

FROM Product,Company_production

WHERE Company_production.id_product=Product.id_product;



ALTER TABLE Company_production

ADD (FOREIGN KEY (id_product) REFERENCES Product (id_product));


ALTER TABLE Company_production

ADD (FOREIGN KEY (INN_sweetshop) REFERENCES sweetshop (INN_sweetshop));


ALTER TABLE Company_production

ADD (FOREIGN KEY (Technological_standart) REFERENCES Technological_standart (Technological_standart));


ALTER TABLE Compounding

ADD (FOREIGN KEY (id_component) REFERENCES Component (id_component));


ALTER TABLE Employee

ADD (FOREIGN KEY (id_cafe) REFERENCES Cafe (id_cafe));


ALTER TABLE Employee

ADD (FOREIGN KEY (id_post) REFERENCES post (id_post));


ALTER TABLE Employee

ADD (FOREIGN KEY (id_change) REFERENCES Change (id_change));


ALTER TABLE Employee

ADD (FOREIGN KEY (INN_sweetshop) REFERENCES sweetshop (INN_sweetshop));


ALTER TABLE Intaking_sheet

ADD (FOREIGN KEY (id_product, INN_sweetshop) REFERENCES Company_production (id_product, INN_sweetshop));


ALTER TABLE Intaking_sheet

ADD (FOREIGN KEY (id_pack) REFERENCES Pack (id_pack));


ALTER TABLE sertificate_of_qualitative

ADD (FOREIGN KEY (id_product, INN_sweetshop) REFERENCES Company_production (id_product, INN_sweetshop));


ALTER TABLE sweetshop

ADD (FOREIGN KEY (id_businessman) REFERENCES Businessman (id_businessman));


ALTER TABLE work_schedule

ADD (FOREIGN KEY (id_day) REFERENCES day_week (id_day));