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

Типы связей между сущностями

Сущность 1

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

Сущность 2

prodaja

N :1

tovar

tovar

N:1

firma_proizvoditelya

tovar

N:1

tip_tovara

tovar

1:N

zakupka

zakupka

1:N

postavshik

Функциональные зависимости

Отношение

Функциональные зависимости

prodaja

1 ‑> 2, 1 ‑> 3, 1 ‑> 4

tovar

1 ‑> 2, 1 ‑> 3,1 ‑> 4,1 ‑> 5, 1 ‑> 6,1 ‑> 7, 1 ‑> 8

zakupka

1 ‑> 2, 1 ‑> 3, 1 ‑> 4, 1 ‑> 5, 1 ‑> 6

postavshik

1 ‑> 2, 1 ‑> 3, 1 ‑> 4, 1 ‑> 5, 1 ‑> 6

firma_proizvoditelya

1 ‑> 2, 1 ‑> 3, 1 ‑> 4

tip_tovara

1 ‑> 2

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

В результате проведенных выше исследований мы можем составить запросы на создание таблиц:

Создание таблицы tip_tovara:

create table tip_tovara

(

nomer_tipa int primary key,

nazvanie_tipa char(30)

) ;

Создание таблицы firma_proizvoditelya:

create table firma_proizvoditelya(

nomer_firmi int primary key,

nazvanie_firmi char(30) UNIQUE,

opisanie_firmi varchar,

ssilka char(30)

);

Создание таблицы tovar:

create table tovar(

id_tovara int primary key,

id_tipa int references "tip_tovara"("nomer_tipa"),

id_firmi int references "firma_proizvoditelya"("nomer_firmi"),

nazvanie_tovara text NOT NULL,

model char(10),

opisanie text,

tsena int4 NOT NULL,

kolichestvo_imeushihsa int check(kolichestvo_imeushihsa>=0)

);

Создание таблицы postavshik:

create table postavshik

(

id_postavshika int primary key,

firma_postavshika char(15),

strana text,

gorod char(15),

address text,

telefone_number char(20)

);

Создание таблицы prodaja:

create table prodaja(

nomer_cheka int primary key ,

id_tovara int references "tovar"("id_tovara"),

kolichestvo_prodaj int check(kolichestvo_prodaj>0),

data_prodaji date default current_date

);

Создание таблицы zakupka:

create table zakupka(

id_zakupki int primary key,

id_postavki int references "postavshik"("id_postavshika"),

data_zakupki text,

kolichestvo int,

tsena_zakupki float NOT NULL,

id_tovara int references "tovar"("id_tovara")

);

Для правильной обработки информации и при исключении отслеживания количества проданного и закупленного товара составим триггеры:

1.Триггер, позволяющий отслеживать количество имеющихся товаров при продаже:

CREATE FUNCTION Prod()

RETURNS trigger

AS 'BEGIN

update tovar

set kolichestvo_imeushihsa =kolichestvo_imeushihsa-new.kolichestvo_prodaj

where id_tovara = new.id_tovara;

RETURN new;

end;'

LANGUAGE 'plpgsql';

CREATE TRIGGER Prod /*Создать триггер*/

AFTER INSERT /*вызываемый после операции insert*/

ON prodaja /*для таблицы продажи*/

FOR EACH ROW /*для каждого кортежа*/

EXECUTE PROCEDURE Prod(); /*вызвать процедуру*/

2. Аналогичный триггер, позволяющий отслеживать количество имеющихся товаров при закупке:

CREATE FUNCTION Zakup()

RETURNS trigger

AS 'BEGIN

update tovar

set kolichestvo_imeushihsa =kolichestvo_imeushihsa+new.kolichestvo

where id_tovara = new.id_tovara;

RETURN new;

end;'

LANGUAGE 'plpgsql';

CREATE TRIGGER Zakup /*Создать триггер*/

AFTER INSERT /*вызываемый после операции insert*/

ON zakupka /*для таблицы продажи*/

FOR EACH ROW /*для каждого кортежа*/

EXECUTE PROCEDURE Zakup(); /*вызвать процедуру*/

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