Автор: Пользователь скрыл имя, 21 Сентября 2011 в 18:02, курсовая работа
Клиент, проконсультировавшись с контрагентом, делает заказ.
Выбирает какую-то продукцию, называет ее количество. Клиент может заказать различные наименования товара. Это будет оформлено в одном заказе.
Описание предметной области……………………………………….…3
Логическая модель…………………………………………………….…..4
Описание логической модели………………………………………….…5
Описание связей…………………………………………………………...8
Физическая модель……………………………………………………….12
Описание физической модели………………………………………....13
Триггеры…………………………………………………………………....20
Процедуры………………………………………………………………....24
(на каждую продажу
оформляется расходная
Поле | Тип данных | Размерность | Ключевое поле | Обязательность | Уникальность | Индексированность |
Номер расходной накладной | Integer | ___ | Primary key* | Обязат. поле | Да | Да |
Дата | Date | ___ | ___ | Обязат. поле | Нет | Нет |
Номер заказа | Integer | ___ | Foreign key (связан с полем Номер заказа таблицы заказ) | Обязат. поле | Нет | Да |
Строка расходной
накладной. Назначение: Хранение информации
о проданном товаре.
Поле | Тип данных | Размер ность | Ключевое поле | Обязательность | Уникальность | Индексированность |
Количество | Varchar2 | (15) | ___ | Обязат. поле | Нет | Нет |
Артикул | Varchar2 | (15) | Foreign key (связан с полем Артикул таблицы Товар) | Обязат. поле | Нет | Да |
Номер расходной накладной | Integer | ___ | Foreign key (связан с полем Номер расходной накладной таблицы Расходная накладная) | Обязат. поле | Нет | Да |
Паспортные данные.
Назначение: Хранение информации о
паспортных данных индивида для его дальнейшей
идентификации.
Поле | Тип данных | Размер ность | Ключевое поле | Обязательность | Уникальность | Индексированность | |||
Кем выдан | Varchar2 | (15) | ___ | Обязат. поле | Нет | Нет | |||
Серия номер | Varchar2 | (15) | ___ | Обязат. поле | Да | Нет | |||
Дата выдачи | Date | ___ | ___ | Обязат. поле | Нет | Нет |
Юридическое лицо. Назначение:
хранение информации о юридических
лицах.
Поле | Тип данных | Размерность | Ключевое поле | Обязательность | Уникальность | Индексированность |
ИНН | Integer | ___ | Primary key* | Обязат. поле | Да | Да |
Наименование | Varchar2 | (15) | ___ | Обязат. поле | Нет | Нет |
Расчетный счет | Integer | ___ | ___ | Обязат. поле | Да | Нет |
Банк. Назначение: хранение
названий банков.
Поле | Тип данных | Размерность | Ключевое поле | Обязательность | Уникальность | Индексированность |
Наименование | Varchar2 | (15) | ___ | Обязат. поле | Нет | Нет |
ИНН | Varchar2 | (15) | ___ | Обязат. поле | Да | Нет |
ОКПО | Varchar2 | (15) | ___ | Обязат. поле | Да | Нет |
БИК | Integer | ___ | Primary key* | Обязат. поле | Да | Да |
Триггеры:
Этот триггер увеличивает поле Kod_stroki_praisa
на единицу максимального значения, т.е.
он является счетчиком (автоматическое
добавление первичных ключей в таблицу
Stroka_praisa)
CREATE OR REPLACE TRIGGER COUNT_katya1_Prais
BEFORE INSERT ON Stroka_praisa
FOR EACH ROW
DECLARE
CURSOR C1 IS SELECT MAX(Kod_stroki_praisa)
FROM Stroka_praisa;
MAXID Stroka_praisa. Kod_stroki_praisa % TYPE;
BEGIN
OPEN C1;
FETCH C1 INTO MAXID;
IF MAXID IS NULL THEN
MAXID:=0;
END IF;
:NEW. Kod_stroki_praisa:=MAXID+1;
END;
Этот триггер увеличивает
поле Kod_edinizi_izmereniya на единицу максимального
значения, т.е. он является счетчиком (автоматическое
добавление первичных ключей в таблицу
Edinica_izmereniya)
CREATE OR REPLACE TRIGGER COUNT _katya2_Ulica1
BEFORE INSERT ON Edinica_izmereniya
FOR EACH ROW
DECLARE
CURSOR C1 IS SELECT MAX(Kod_edinizi_izmereniya)
FROM Edinica_izmereniya;
MAXID Edinica_izmereniya. Kod_edinizi_izmereniya % TYPE;
BEGIN
OPEN C1;
FETCH C1 INTO MAXID;
IF MAXID IS NULL THEN
MAXID:=0;
END IF;
:NEW. Kod_edinizi_izmereniya:=MAXID+
END;
Этот триггер увеличивает
поле Kod_Adresa на единицу максимального значения,
т.е. он является счетчиком (автоматическое
добавление первичных ключей в таблицу
Adres)
CREATE OR REPLACE TRIGGER COUNT_katya_3_Adres1
BEFORE INSERT ON Adres
FOR EACH ROW
DECLARE
CURSOR C1 IS SELECT MAX(Kod_Adresa)
FROM Adres;
MAXID Adres. Kod_Adresa % TYPE;
BEGIN
OPEN C1;
FETCH C1 INTO MAXID;
IF MAXID IS NULL THEN
MAXID:=0;
END IF;
:NEW. Kod_Adresa:=MAXID+1;
END;
Подобные триггеры можно сделать для таблиц prais, rashodnaya_nakladnaya, zakaz, Kod_ulicy.
Данный триггер через процедуру Pasport
проверяет, чтобы новое зн-е серии и номера
паспорта соответственно строго равнялось
10 символам.
CREATE OR REPLACE TRIGGER TR_seria
BEFORE INSERT OR REPLACE UPDATE ON Pasportnye_dannye
FOR EACH ROW
BEGIN
Katya(:NEW. Seria_nomer, 10,’seria_nomer_pasporta’);
END;
ПРОЦЕДУРЫ
1. Данная процедура выводит ошибку, которая сообщает, что длина строки не соответствует указанному количеству цифр.
(по триггеру №5)
CREATE OR REPLACE PROCEDURE Pasport (Strok IN VARCHAR2,
Kol IN NUMBER, Msg IN VARCHAR2) IS
BEGIN
IF LENGTH(Strok)<> Kol THEN
RAISE_APPLICATION_ERROR(-
[`||TO CHAR(Kol)||`]символов`);
END IF;
END;
Информация о работе БД по учету продаж продукции мясокомбината