Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
БД / КР_БД_4семестр.doc
Скачиваний:
23
Добавлен:
10.02.2016
Размер:
357.38 Кб
Скачать

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

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

Таким образом, база данных должна отвечать следующим требованиям:

- сохранять данные о товаре, поставках, продажах, поставщиках и наличии конкретного товара

- обеспечивать автоматический подсчет количества при продажах и поставках

Таким образом, программа должна отвечать следующим требованиям:

- иметь возможность просмотра данных о телефонах, для предоставления их покупателям

- возможность ввода данных о продаже телефона и поставке товара

В итоге мы получим комплекс позволяющий автоматизировать работу магазина по учету и аудиту.

2. Проектирование базы данных

2.1. В соответствии с требованиями поставленными в п.1 определим набор сущностей:

1.Телефоны.Тут находятся телефоны и их характеристики

2. Поставки.Тут находятся данные о всех совершенных поставках товара.

3.ПродажиТут находятся данные о всех совершенных продажах.

4.Поставщики. Данные о поставщиках.

5.Наличие. Данные о наличии товара.

2.2.Определим типы связей между полученными сущностями:

Сущность 1

Степень связи

Сущность 2

Поставка

N:1

Поставщик

Продажа

N:1

Телефоны

Поставка

N:1

Телефоны

2.3. Определим атрибуты сущностей их типы

1.ТЕЛЕФОНЫ

- код – Ключевое поле, целый

- модель – Символьный

- фирма – Символьный

- стандарт связи – Символьный

- вес – Целый

- размер – Символьный

- интерфейсы – Символьный

- интернет – Символьный

- разрешение – Символьный

- камера – Символьный

- радио FM– Символьный

- память – Целый

- емкость аккумкл. – Целый

- смартфон – Символьный

- гарантия – Символьный

- цена – Вещественный

- количество – целый

2. ПОСТАВКА

- №накладной – Ключевое поле, целый

- код товара – Целый (ТЕЛЕФОНЫ)

- количество – Целый

- цена – Вещественный

- поставщик – Целый (ПОСТАВЩИК)

- дата – Дата

3.ПОСТАВЩИК

- IDпоставщика – Ключевое поле, целый

- имя – Символьный

- адрес – Символьный

- номер телефона – Символьный

4.ПРОДАЖА

- №накладной – Ключевое поле, целый

- код товара – Целый (ТЕЛЕФОНЫ)

- стоимость – Вещественный

- дата – Дата

2.4.В итоге информационная модель выглядит таким образом:

2.5.Проверка на соответствие НФБК:

В сущности Телефоны имеется ключевое поле код от которого зависят все остальные атрибуты. Все атрибуты характеризуют именно конкретную модель т.е. поле код, по которому мы различаем модели. Однако остальные атрибуты не зависят друг от друга. Следовательно можно сделать вывод о соответствии НФБК.

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

По аналогичным рассуждениям делаем вывод о соответствии и остальных сущностей.

2.6. По составленной информационной модели составим SQL-запросы на создание необходимых таблиц:

/*таблица Телефоны*/

create table Telefon(

code int primary key,

model char(20),

label char(20),

std_svyazi char(20),

weight int ,

razmer char(50),

interfaces char(60),

internet char(60),

ekran char(50),

camera char(60) ,

radio_FM char(10) ,

memory int ,

battery int ,

smartfon char(50) ,

garantija char(30),

price decimal(10,2),

kolichestvo int

);

/*таблица поставщик*/

create table Postavshik

(

ID_postavshika int primary key,

name char(20) not null,

address char(50),

telefone_numbr char(20)

);

/*таблица поставки*/

create table Postavka(

NO_nakladnoi int primary key,

data date,

code_telefon int references Telefon(code),

postavshik int references Postavshik (ID_postavshika),

price_pokupki decimal(10,2),

kolichestvo int check(kolichestvo>0)

);

/*таблица продажи*/

create table Prodaja

(

NO_nakladnoi int primary key,

code_telefon int references Telefon(code),

price_prodaji decimal(10,2) not null,

kolichestvo int check (kolichestvo>0),

data date,

klient char(70)

) ;

2.7.Для обеспечения автоматизации составим триггеры.

Данный триггер обеспечивает автоматическое изменение количество товара при его продаже в таблице ТЕЛЕФОНЫ. Имеется проверка на наличие такого количества продаваемого товара, в случае невозможности выполнения такой операции возвращается сообщение об ошибке:

CREATE FUNCTION kolichestvo()

RETURNS trigger

AS

'BEGIN /*Начало основного программного блока функции*/

if ((select kolichestvo-new.kolichestvo from telefon where code = new.code_telefon )<0)

then RAISE EXCEPTION 'Net takogo kolichestva';

else update telefon set kolichestvo=kolichestvo-new.kolichestvo

where code = new.code_telefon;

end if;

RETURN new;

END;'

LANGUAGE 'plpgsql';

CREATE TRIGGER kolichestvo

before INSERT

ON prodaja

FOR EACH ROW

EXECUTE PROCEDURE kolichestvo();

И аналогичный триггер для поставки: необходимо просто обновить запись, прибавив к исходному количеству вновь поставленное:

CREATE FUNCTION newPostavka()

RETURNS trigger

AS

'BEGIN /*Начало основного программного блока функции*/

update telefon set kolichestvo = kolichestvo+new.kolichestvo

where code = new.code_telefon;

RETURN new;

END;'

LANGUAGE 'plpgsql';

CREATE TRIGGER newPostavka

after INSERT

ON postavka

FOR EACH ROW

EXECUTE PROCEDURE newPostavka();

Соседние файлы в папке БД