Методологія проектування баз даних 2

[ виправити ] текст може містити помилки, будь ласка перевіряйте перш ніж використовувати.

скачати

Калузький філія Державного освітньої установи вищої професійної освіти "Московський державний технічний університет ім. Н. Е. Баумана »
Кафедра ЕіУ 3-К "ЕІУК"
Методологія проектування баз даних
Розрахунково-пояснювальна записка до курсової роботи
за курсом
Проектування алгоритмів та програмного забезпечення
м. Калуга
2007

Зміст
1. Детальна постановка задачі
2. Концептуальне проектування
3. Логічне проектування
4. Фізичне проектування.
5. Фізична реалізація
Список використаної літератури

1. Детальна постановка задачі
Існує підприємство, що займається виробництвом компонентів для систем кабельного та супутникового телебачення.
Підприємство складається з декількох підрозділів, кожне з яких має свій номер і назва та ПІБ директора підрозділу. Принципове значення для даної задачі має служба якості. У службі якості виділяється провідний фахівець, який є директором цієї служби. Це єдина людина на підприємстві, який має право формувати електронні документи, вносити в них зміни, видаляти їх. Усі інші працівники (користувачі) незалежно від приналежності до того чи іншого підрозділу мають право тільки проглядати електронні документи в режимі читання. Всі документи діляться на дві категорії:
Ø нормативні документи системи менеджменту якості (СМЯ)
Ø внутрішні документи СМЯ
Перелік документів і форма їх складання є прерогативою директора служби якості.
Кожен документ має реквізити: номер за класифікатором, найменування, дату прийняття, тематику, статус, дату зміни, характер змін (якщо вони були). Необхідно мати на увазі, що кожному номеру документа за класифікатором в категорії нормативних документів фізично може відповідати кілька документів (формат ****. doc). Дистанційні документи повинні поміщатися на зберігання в електронний архів на невизначений термін. Очищати цей архів може тільки директор служби якості.
Ведеться протокол роботи користувачів з обома категоріями документів, в якому відображається ім'я документа, до якого здійснювався доступ, дата доступу, прізвище працівника (ім'я користувача).
Директор служби якості проводить в підрозділах внутрішні перевірки системи якості на предмет відповідності роботи цих підрозділів вимогам нормативної та внутрішньої документації СУЯ. Результати перевірок містять наступні дані:
- Перевіряється підрозділ
- Номер перевірки
- Дата перевірки
- Опис невідповідності
- Вид невідповідності (значне, незначне)
Типові операції:
- Додавання документа
- Редагування документа
- Опис внесених змін
- Видалення документа (додавання в електронний архів)
- Видалення документів з електронного архіву
- Додавання / видалення результатів внутрішніх перевірок СМЯ
- Підготовка звіту про результати внутрішніх перевірок СМЯ за формою:
Дата перевірки
Найменування перевіряється підрозділи
Опис невідповідності (якщо воно є)
- Підготовка звіту про роботу користувачів з документами СУЯ за формою:
Дата
Найменування документа
Час
Прізвище

2. Концептуальне проектування

Визначення типів сутності:
- Підрозділ
- Директор служби якості
- Працівники
- Електронний документ
- Нормативний документ СМЯ [1]
- Внутрішній документ СМЯ
- Протокол роботи
- Перевірки СМЯ
Визначення типів зв'язку:
- Директор служби якості працює з електронними документами
- Електронні документи включають в себе нормативні документи СМЯ
- Електронні документи включають в себе внутрішні документи СМЯ
- Документи враховуються в протоколі роботи
- Директор служби якості проводить перевірки підрозділів
- Підрозділи беруть участь у перевірках
- Працівники фіксуються в протоколі роботи
- Працівники приписані до підрозділів
Таблиця № 1 Типи сутності
Найменування
Короткий опис
Синоніми
Особливості
Підрозділ
Структурна одиниця підприємства
Відділ
Кожен підрозділ очолюється директором
Директор служби якості
Директор з якості
Центральна фігура в даній постановці задачі
Працівники
Загальне найменування для всіх працюючих на підприємстві
У даній постановці завдання - це всі інші крім Директора з якості
Електронний документ
Документ в електронному вигляді в форматі ***. doc
Файл
Діляться на дві категорії
Нормативний документ СМЯ
Документи, що відображають загальноприйняті стандарти в ЗМК
Внутрішній документ СМЯ
Документи, що діють всередині підприємства
Протокол роботи
Інформація про роботу з документами
Статистика роботи з документами
Звернення будь-якого працівника до будь-якого документа повинно відображатися в протоколі роботи
Перевірки СМЯ
Дія з виявлення невідповідностей
Аудит
Тільки директор служби якості перевіряє підрозділи
Таблиця № 2 Типи зв'язків
Тип сутності
Тип зв'язку
Тип сутності
Кардинальність
Ступінь участі
Директор служби якості
Працює
Ел. документ
1: М
Т: Т
Працівники
Приписані до
Підрозділи
М: 1
Т: Т
Працівники
Фіксуються
Протокол роботи
1: М
Р: Т
Електронні документи
Включають в себе
Нормативні документи СМЯ
М: N
Р: Т
Електронні документи
Включають в себе
Внутрішні документи СМЯ
М: N
Р: Т
Електронні документи
Враховуються в
Протокол роботи
1: М
P: Т
Директор служби якості
Проводить
Перевірки
1: М
Т: Т
Підрозділи
Беруть участь у
Перевірки
1: М
Т: Р

Таблиця № 3 Атрибути
Тип сутності
(Тип зв'язку)
Атрибут
Опис
Тип даних
Значення за замовчуванням
Допустимість NULL
Похідні /
множинні
Підрозділ
Назва
Символьний
-
Ні
Номер
Унікальний №
Цілий
-
Ні
ПІБ директора підрозділу
Прізвище директора підрозділу
символьний
-
Ні
Директор служби якості
Дата вступу на посаду
Date
-
Ні
П.І.Б.
Прізвище, ім'я, по батькові
Символьний
Ні
ім'я користувача
Символьний
Ні
Працівники
ім'я користувача
Символьний
Ні
П.І.Б.
Прізвище, ім'я, по батькові
Символьний
Ні
Електронний документ
Номер за класифікатором
Номер - це пункт ISO 9001
Символьний
-
Ні
Найменування документа
Символьний
-
Ні
Дата прийняття
Дата набуття документом чинності
Дата
-
Ні
Тематика
Символьний
-
Так
Статус
Змінений
Вилучений
Символьний
-
Так
Дата зміни
Дата зміни нормативного або внутрішнього документа
Дата
-
Так
Характер змін
Опис внесених у документ змін (якщо вони були)
Символьний
-
Так
Нормативний документ СМЯ
Ті ж, що й у електронного документа
Внутрішній документ СМЯ
Ті ж, що й у електронного документа
Протокол роботи
Дата-час доступу
Поточна дата
Дата - час
Ні
Перевірки СМЯ
Номер перевірки
Наскрізна нумерація, починаючи з 1
Цілий
-
Ні
Дата перевірки
Дата
Ні
Опис невідповідності
Текстовий опис порушень
Символьний
-
Так
Вид невідповідності
Значне, незначне
Символьний
-
Так

Таблиця № 4 Домени атрибутів
Домен
Атрибут
Тип даних
Обмеження
Приклади значень
Найменування
Підрозділи
Символьний (70)
Служба якості
документа
Управління документацією
Номер
Підрозділи
Цілий
документа
Символьний (7)
4.2.3
перевірки
Цілий
ПІБ
Директора підрозділу
Символьний (20)
Іванов І.І.
Працівника
Ім'я
користувач
Символьний (20)
SYSDBA
Дата
Прийняття електронного документа,
нормативного, внутрішнього
Date
Не пізніше поточної
Перевірки
Поточна, або раніше поточної дати
Не раніше поточної
Зміни електронного документа,
нормативного, внутрішнього
Поточна, або раніше поточної дати
Доступу в протоколі роботи
поточна
Опис
Характеру змін електронного документа,
нормативного, внутрішнього
Символьний (30)
Символьний (1000)
Змінено сторінки 2,5,9
Невідповідностей у перевірках СМЯ
Опис процесів життєвого циклу продукції не відповідає вимогам нормативної документації, пункт 7.1
Тематика
електронного документа,
нормативного, внутрішнього
Символьний (30)
Дирекція.
Планово - економічний відділ.
Статус
електронного документа,
нормативного, внутрішнього
Символьний (10)
Змінений.
Вилучений.
На корекцію.
Вид невідповідності
У перевірках СМЯ
Символьний (15)
Значне.
Незначне.
Таблиця № 5 Ключі
Сутність
ПК
Альтернативний ключ
Підрозділ
Номер
Назва
Директор служби якості
Ім'я користувача
П.І.Б.
Працівники
Ім'я користувача
П.І.Б.
Електронний документ
Найменування документу +
Номер за класифікатором
Нормативний документ СМЯ
Внутрішній документ СМЯ
Протокол роботи
Дата-час
Перевірки СМЯ
Номер перевірки
Спеціалізація / генералізація
Перетворимо сутність «електронний документ» у суперклас. Підкласами будуть «нормативний документ СМК», «внутрішній документ СМК». Підкласи не перетинаються, участь суперкласу повне.
ER - Модель

SHAPE \ * MERGEFORMAT
підрозділи
номер
беруть участь у
перевірки
№ перевірки
електронні док-ти
найменування
№ за класи сіфікатору
внутрішній док-т СМК
нормативний док-т СМК
d
Директор служби
якості
працівники
ім'я корис вача
приписані
до
проводить
враховуються в
1
1
M
M
M
1
фіксуються в
M
M
1
1
Протокол роботи
Дата-час
працює
M
1
ім'я користувача


3. Логічне проектування
Передбачається використання реляційної моделі даних. Необхідно позбавитися від структур концептуальної моделі, не реалізованих в рамках реляційної моделі.
Видаляємо зв'язок «Директор служби якості працює з електронними документами», тому що цей зв'язок є транзакцією.
Скоригований ER-модель
SHAPE \ * MERGEFORMAT
підрозділи
номер
беруть участь у
перевірки
№ перевірки
електронні док-ти
найменування
№ за класи сіфікатору
внутрішній док-т СМК
нормативний док-т СМК
d
Директор служби
якості
працівники
ім'я корис вача
приписані
до
проводить
враховуються в
1
1
M
M
M
1
фіксуються в
M
M
1
1
Протокол роботи
Дата-час
ім'я користувача


Визначення набору відносин
Об'єднаймо підкласи «нормативний документ СМК» і «внутрішній документ СМЯ» в одне ставлення «Електронний документ», тому що всі екземпляри сутностей обох підкласів мають однакові атрибути. Також для цього відношення необхідно визначити новий атрибут «вид документа» для того, щоб ідентифікувати, до якого підкласу стосується документ.
1. Директор служби якості (П.І.Б., ім'я користувача, дата вступу на посаду) ПК: ім'я користувача
2. Перевірки (№ перевірки, дата, опис невідповідності, вид невідповідності, П.І.Б., № підрозділу)
ПК: № перевірки
ВК: ім'я користувача директора служби якості Директор служби якості
ВК: номер підрозділу Підрозділи
3. Підрозділи (№ підрозділу, назву, П.І.П. директора підрозділу) ПК: номер
4. Працівники (П.І.Б., ім'я користувача, номер підрозділу)
ПК: ім'я користувача
ВК: номер Підрозділи
5. Протокол роботи (назва документа, номер за класифікатором, дата-час доступу, П.І.Б., ім'я користувача)
ПК: дата-час
ВК: найменування док-та + номер за класифікатором Електронні документи
ВК: ім'я користувача Працівники
6. Електронні документи (найменування документа, номер за класифікатором, дата прийняття, дата зміни, тематика, статус, характер змін, вид документа)
ПК: найменування док-та + номер за класифікатором
Перевірка відносин на відповідність вимогам нормалізації:
2 НФ
1. П.І.Б. дата вступу на посаду
П.І.Б. ім'я користувача
ім'я користувача П.І.Б.
ім'я користувача дата вступу на посаду
2. № перевірки дата перевірки
№ перевірки опис невідповідності
№ перевірки вид невідповідності
3. № назва підрозділу
П.І.Б. директора підрозділу
назва підрозділу
назва підрозділу П.І.Б. директора підрозділу
4. П.І.Б. ім'я користувача
ім'я користувача П.І.Б.
5. власний атрибут тільки один - «дата-час»
6. Найменування документу + номер за класифікатором дата прийняття
Найменування документу + номер за класифікатором тематика
Найменування документу + номер за класифікатором статус
Найменування документу + номер за класифікатором характер змін
Найменування документу + номер за класифікатором дата зміни
3 НФ
Транзитивні залежності відсутні, значить, відносини відповідають 3НФ.
НФБК
У відносинах 1-5 ПК складається з одного атрибута, а відносно 6 відсутні декілька складених потенційних ключів, що перетинаються по набору атрибутів. Отже, всі відносини відповідають НФБК, що гарантує відсутність проблем оновлення.
Отримана ER-модель (стор. 15) дозволяє реалізувати всі транзакції, викладені у постановці завдання.
Вимоги, що забезпечують посилальну цілісність
1) Для всіх первинних ключів встановлюється значення NOT NULL.
2) Атрибути, які допускають NULL:
Ø Відношення «Перевірки»
Атрибути: опис невідповідності, вид невідповідності
Ø Відношення «Протокол роботи»
Атрибути, які є ВК: ПІБ, Назва документу + номер за класифікатором
Ø Відношення «Електронні документи»
Атрибути: Дата зміни, статус, тематика, характер зміни
3) Для всіх ВК: ON UPDATE CASCADE ON DELETE NO ACTION
Крім ВК щодо «Протокол роботи»:
ON UPDATE CASCADE ON DELETE CASCADE
4) Бізнес-правила:
Директор служби якості має повний доступ до всієї інформації в БД, всі інші працівники мають обмежений доступ, а саме, перегляд документів в режимі читання.

4. Фізичне проектування
Директор служби якості
ПІБ (*)
Ім'я користувача
Дата вступу на посаду
Перевірки
№ перевірки (*)
Дата
Опис невідповідності
Вид невідповідності
ПІБ
№ підрозділи
Підрозділи
Номер (*)
Назви
ПІБ директора підрозділу
Працівники
Номер (*)
ПІБ
Ім'я користувача
№ підрозділи
Протокол роботи
Номер (*)
Дата-час доступу
№ працівника
№ документа
Електронні документи
Вид документа
№ по класифікатору
Найменування документа
Дата прийняття
Дата зміни
Статус
Тематика
Характер зміни
№ документа

Архів видалених документів
№ по класифікатору
Найменування документа
Дата прийняття
Дата видалення
Тематика
Характер зміни
Вид документа
Номер (*)
Створення вторинних індексів:
Таблиця «Працівники»: поле «Ім'я користувача»
Таблиця «Електронні документи»: поле («Найменування» + «№ за класифікатором»)
Доступ:
Директор служби якості і адміністратор - повний доступ, а всі інші - перегляд документів в режимі читання.

5. Фізична реалізація
Серверна частина
/************************************************* *******/
/ ** Generated by IBExpert 2004.01.22 23.05.2004 20:38:17 ****/
/************************************************* *******/
SET SQL DIALECT 3;
SET NAMES WIN1251;
CREATE DATABASE 'Document: C: \ Program Files \ Borland \ InterBase \ bin \ ELECTRDOC.GDB'
USER 'SYSDBA' PASSWORD 'administrator'
PAGE_SIZE 1024
DEFAULT CHARACTER SET WIN1251;
/************************************************* ********/
/**** Generators ****/
/************************************************* ********/
CREATE GENERATOR ARHIVN;
SET GENERATOR ARHIVN TO 16;
CREATE GENERATOR DOCN;
SET GENERATOR DOCN TO 17;
CREATE GENERATOR PODRAZDN;
SET GENERATOR PODRAZDN TO 4;
CREATE GENERATOR PROTOCOLN;
SET GENERATOR PROTOCOLN TO 52;
CREATE GENERATOR PROVERKIN;
SET GENERATOR PROVERKIN TO 13;
CREATE GENERATOR RABN;
SET GENERATOR RABN TO 19;
/************************************************* ************/ /**** Exceptions ****/
/************************************************* *****/
CREATE EXCEPTION NODELETE 'Не можна видалити даного працівника';
CREATE EXCEPTION NOLOGIN 'Ім'я користувача повинно бути унікальним';
SET TERM ^;
/************************************************* ***********/
/**** Stored Procedures ****/
/************************************************* ***********/
CREATE PROCEDURE ADD_DOCUMENT (
NKLASS VARCHAR (7),
TEMA VARCHAR (30),
DATA DATE,
VID VARCHAR (15),
NAME VARCHAR (70))
AS
BEGIN
EXIT;
END ^
CREATE PROCEDURE ADDDIRECTOR (
DATA DATE,
LOGIN VARCHAR (20),
FAMILY VARCHAR (20))
AS
BEGIN
EXIT;
END ^
CREATE PROCEDURE ADDPODRAZDELENIE (
NAZV VARCHAR (70),
FIO VARCHAR (20))
AS
BEGIN
EXIT;
END ^
CREATE PROCEDURE ADDPROTOCOL (
NUMDOC INTEGER)
AS
BEGIN
EXIT;
END ^
CREATE PROCEDURE ADDPROVERKI (
NAZVPODR VARCHAR (70),
FIO VARCHAR (20),
OPISANIE VARCHAR (1000),
VID VARCHAR (15),
DATA DATE)
AS
BEGIN
EXIT;
END ^
CREATE PROCEDURE CLEARARHIV
AS
BEGIN
EXIT;
END ^
CREATE PROCEDURE CLEARPROTOCOL
AS
BEGIN
EXIT;
END ^
CREATE PROCEDURE DELETEDIRECTOR (
FIO VARCHAR (20))
AS
BEGIN
EXIT;
END ^
CREATE PROCEDURE DELETEDOC (
NUM INTEGER)
AS
BEGIN
EXIT;
END ^
CREATE PROCEDURE DELETEPODRAZD (
NOMER INTEGER)
AS
BEGIN
EXIT;
END ^
CREATE PROCEDURE DELETEPROVERKA (
NPROVERKI INTEGER)
AS
BEGIN
EXIT;
END ^
CREATE PROCEDURE DELETERABOTNIK (
NUM INTEGER)
AS
BEGIN
EXIT;
END ^
CREATE PROCEDURE EDITPROVERKI (
OPISANIE VARCHAR (1000),
NPROV INTEGER,
VID VARCHAR (15),
NAZVPODR VARCHAR (70),
FIO VARCHAR (20),
DATA DATE)
AS
BEGIN
EXIT;
END ^
CREATE PROCEDURE NEW_PROCEDURE (
NAZV VARCHAR (70),
LOGIN VARCHAR (20),
FIO VARCHAR (20))
AS
BEGIN
EXIT;
END ^
CREATE PROCEDURE UPDATEDOCUMENT (
IZMEN VARCHAR (30),
TEMA VARCHAR (30),
NUM INTEGER)
AS
BEGIN
EXIT;
END ^
SET TERM; ^/********************************************* *******************/
/**** Tables ****/
/************************************************* ***********/
CREATE TABLE ARHIVDOC (
NDOC INTEGER NOT NULL,
NKLASS VARCHAR (7) NOT NULL,
NAIMENDOC VARCHAR (70) NOT NULL,
VIDDOC VARCHAR (15) NOT NULL,
DATAPRINYATIYA DATE NOT NULL,
DATADELETE DATE NOT NULL,
TEMATIKA VARCHAR (30),
IZMENENIYA VARCHAR (30)
);
CREATE TABLE DIRECTOR (
FIO VARCHAR (20) NOT NULL,
LOGIN VARCHAR (20) NOT NULL,
DATAVSTUPLENIYA DATE NOT NULL
);
CREATE TABLE DOCUMENT (
NDOC INTEGER NOT NULL,
NKLASS VARCHAR (7) NOT NULL,
NAIMENDOC VARCHAR (70) NOT NULL,
VIDDOC VARCHAR (15) NOT NULL,
DATAPRINYATIYA DATE NOT NULL,
DATAIZMEN DATE,
STATUS VARCHAR (10),
TEMATIKA VARCHAR (30),
IZMENENIYA VARCHAR (30)
);
CREATE TABLE PODRAZD (
NPODR INTEGER NOT NULL,
FIOPODR VARCHAR (20) NOT NULL,
NAZVANIE VARCHAR (70) NOT NULL
);
CREATE TABLE PROTOCOL (
NUMBER INTEGER NOT NULL,
DATA DATE NOT NULL,
NRAB INTEGER,
NDOC INTEGER,
VREMYA TIME NOT NULL
);
CREATE TABLE PROVERKI (
NPROVERKI INTEGER NOT NULL,
DATA DATE NOT NULL,
FIO VARCHAR (20) NOT NULL,
NPODR INTEGER NOT NULL,
VID VARCHAR (15),
OPISANIE VARCHAR (1000)
);
CREATE TABLE RABOTNIK (
NUMBER INTEGER NOT NULL,
FIO VARCHAR (20) NOT NULL,
LOGIN VARCHAR (20) NOT NULL,
NPODR INTEGER NOT NULL );/******************************************* *******************/
/**** Unique Constraints ****/
/************************************************* ********/
ALTER TABLE DOCUMENT ADD CONSTRAINT UNQ_DOCUMENT UNIQUE (NKLASS, NAIMENDOC);
ALTER TABLE RABOTNIK ADD CONSTRAINT UNQ_RAB UNIQUE (LOGIN);
/************************************************* ***********/
/**** Primary Keys ****/
/************************************************* ***********/
ALTER TABLE ARHIVDOC ADD CONSTRAINT PK_ARHIVDOC PRIMARY KEY (NDOC);
ALTER TABLE DIRECTOR ADD CONSTRAINT PK_DIRECTOR PRIMARY KEY (FIO);
ALTER TABLE DOCUMENT ADD CONSTRAINT PK_DOCUMENT PRIMARY KEY (NDOC);
ALTER TABLE PODRAZD ADD CONSTRAINT PK_PODRAZD PRIMARY KEY (NPODR);
ALTER TABLE PROTOCOL ADD CONSTRAINT PK_PROTOCOL PRIMARY KEY (NUMBER);
ALTER TABLE PROVERKI ADD CONSTRAINT PK_PROVERKI PRIMARY KEY (NPROVERKI);
ALTER TABLE RABOTNIK ADD CONSTRAINT PK_RABOTNIK PRIMARY KEY (NUMBER);
/************************************************* ***********/
/**** Foreign Keys ****/
/************************************************* ***********/
ALTER TABLE PROTOCOL ADD CONSTRAINT FK_PROTOCOL_DOC FOREIGN KEY (NDOC) REFERENCES DOCUMENT (NDOC) ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE PROTOCOL ADD CONSTRAINT FK_PROTOCOL_RAB FOREIGN KEY (NRAB) REFERENCES RABOTNIK (NUMBER) ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE PROVERKI ADD CONSTRAINT FK_PROV_DIR FOREIGN KEY (FIO) REFERENCES DIRECTOR (FIO) ON DELETE NO ACTION ON UPDATE CASCADE;
ALTER TABLE PROVERKI ADD CONSTRAINT FK_PROV_PODRAZD FOREIGN KEY (NPODR) REFERENCES PODRAZD (NPODR) ON DELETE NO ACTION ON UPDATE CASCADE;
ALTER TABLE RABOTNIK ADD CONSTRAINT FK_RAB_PODR FOREIGN KEY (NPODR) REFERENCES PODRAZD (NPODR) ON DELETE NO ACTION ON UPDATE CASCADE;
/************************************************* ***********/
/**** Triggers ****/
/************************************************* ***********/
SET TERM ^;
/ * Trigger: BI_ARHIV * /
CREATE TRIGGER BI_ARHIV FOR ARHIVDOC
ACTIVE BEFORE INSERT POSITION 0
AS
begin
/ * Trigger text * /
NEW.ndoc = GEN_ID (arhivn, 1);
end
^
/ * Trigger: BI_DOCUMRNT * /
CREATE TRIGGER BI_DOCUMRNT FOR DOCUMENT
ACTIVE BEFORE INSERT POSITION 0
AS
begin
/ * Trigger text * /
NEW.ndoc = GEN_ID (docn, 1);
end
^
/ * Trigger: BI_PODRAZD * /
CREATE TRIGGER BI_PODRAZD FOR PODRAZD
ACTIVE BEFORE INSERT POSITION 0
AS
begin
/ * Trigger text * /
NEW.npodr = GEN_ID (podrazdn, 1);
end
^
/ * Trigger: BI_PROTOCOL * /
CREATE TRIGGER BI_PROTOCOL FOR PROTOCOL
ACTIVE BEFORE INSERT POSITION 0
AS
begin
/ * Trigger text * /
NEW.number = GEN_ID (protocoln, 1);
end
^
/ * Trigger: BI_PROVERKI * /
CREATE TRIGGER BI_PROVERKI FOR PROVERKI
ACTIVE BEFORE INSERT POSITION 0
AS
begin
/ * Trigger text * /
NEW.nproverki = GEN_ID (proverkin, 1);
end
^
/ * Trigger: BI_RABOTNIK * /
CREATE TRIGGER BI_RABOTNIK FOR RABOTNIK
ACTIVE BEFORE INSERT POSITION 0
AS
begin
/ * Trigger text * /
NEW.number = GEN_ID (rabn, 1);
end
^
SET TERM; ^
/************************************************* **********/
/**** Stored Procedures ****/
/************************************************* **********/
SET TERM ^;
ALTER PROCEDURE ADD_DOCUMENT (
NKLASS VARCHAR (7),
TEMA VARCHAR (30),
DATA DATE,
VID VARCHAR (15),
NAME VARCHAR (70))
AS
begin
/ * Procedure Text * /
insert into document (nklass, naimendoc, viddoc, dataprinyatiya, tematika)
values ​​(: nklass,: name,: vid,: data,: tema);
end
^
ALTER PROCEDURE ADDDIRECTOR (
DATA DATE,
LOGIN VARCHAR (20),
FAMILY VARCHAR (20))
AS
begin
insert into director (FIO, LOGIN, DATAVSTUPLENIYA)
values ​​(: family,: login,: data);
/ * Procedure Text * / / * $ $ IBE $ $
suspend;
$ $ IBE $ $ * /
end
^
ALTER PROCEDURE ADDPODRAZDELENIE (
NAZV VARCHAR (70),
FIO VARCHAR (20))
AS
begin
insert INTO podrazd (FIOPODR, NAZVANIE)
VALUES (: fio,: nazv);
end
^
ALTER PROCEDURE ADDPROTOCOL (
NUMDOC INTEGER)
AS
DECLARE VARIABLE NRAB INTEGER;
DECLARE VARIABLE USE VARCHAR (20);
DECLARE VARIABLE VREMYA TIME;
DECLARE VARIABLE DATA DATE;
begin
/ * Procedure Text * /
use = user;
data = 'TODAY';
vremya = 'NOW';
select NUMBER
FROM rabotnik
WHERE LOGIN =: use
INTO: NRAB;
INSERT INTO protocol (DATA, VREMYA, NRAB, NDOC)
VALUES (: DATA,: VREMYA,: NRAB,: numdoc);
end
^
ALTER PROCEDURE ADDPROVERKI (
NAZVPODR VARCHAR (70),
FIO VARCHAR (20),
OPISANIE VARCHAR (1000),
VID VARCHAR (15),
DATA DATE)
AS
DECLARE VARIABLE PODR INTEGER;
begin
SELECT NPODR
FROM podrazd WHERE NAZVANIE =: NAZVPODR
INTO PODR;
INSERT INTO PROVERKI (DATA, FIO, NPODR, VID, OPISANIE)
VALUES (: DATA,: FIO,: PODR,: VID,: OPISANIE);
end
^
ALTER PROCEDURE CLEARARHIV
AS
begin
/ * Procedure Text * /
delete from arhivdoc;
end
^
ALTER PROCEDURE CLEARPROTOCOL
AS
begin
/ * Procedure Text * /
delete from protocol;
end
^
ALTER PROCEDURE DELETEDIRECTOR (
FIO VARCHAR (20))
AS
begin
/ * Procedure Text * /
DELETE FROM director
where FIO =: fio;
end
^
ALTER PROCEDURE DELETEDOC (
NUM INTEGER)
AS
DECLARE VARIABLE IZMENENIYA VARCHAR (30) CHARACTER SET WIN1251;
DECLARE VARIABLE TEMATIKA VARCHAR (30) CHARACTER SET WIN1251;
DECLARE VARIABLE DATA DATE;
DECLARE VARIABLE VIDDOC VARCHAR (15) CHARACTER SET WIN1251;
DECLARE VARIABLE NAIMENDOC VARCHAR (70) CHARACTER SET WIN1251;
DECLARE VARIABLE NKLASS VARCHAR (7) CHARACTER SET WIN1251;
begin
/ * Procedure Text * /
select nklass, naimendoc, viddoc, dataprinyatiya, tematika, izmeneniya
from document
where ndoc =: num
into: nklass,: naimendoc,: viddoc,: data,: tematika,: izmeneniya;
delete from document
where ndoc =: num;
insert into arhivdoc (nklass, naimendoc, viddoc, dataprinyatiya, datadelete, tematika, izmeneniya)
values ​​(: nklass,: naimendoc,: viddoc,: data, 'TODAY',: tematika,: izmeneniya);
end
^
ALTER PROCEDURE DELETEPODRAZD (
NOMER INTEGER)
AS
begin
DELETE from podrazd
WHERE NPODR =: nomer;
end
^
ALTER PROCEDURE DELETEPROVERKA (
NPROVERKI INTEGER)
AS
begin
/ * Procedure Text * /
delete FROM proverki
where NPROVERKI =: nproverki;
end
^
ALTER PROCEDURE DELETERABOTNIK (
NUM INTEGER)
AS
begin
DELETE FROM RABOTNIK
WHERE NUMBER =: NUM;
/ * Procedure Text * /
WHEN ANY do exception NODELETE;
end
^
ALTER PROCEDURE EDITPROVERKI (
OPISANIE VARCHAR (1000),
NPROV INTEGER,
VID VARCHAR (15),
NAZVPODR VARCHAR (70),
FIO VARCHAR (20),
DATA DATE)
AS
DECLARE VARIABLE PODR INTEGER;
begin
SELECT NPODR
FROM podrazd WHERE NAZVANIE =: NAZVPODR
INTO PODR;
UPDATE PROVERKI
SET DATA =: DATA, FIO =: FIO, NPODR =: PODR, VID =: VID, OPISANIE =: OPISANIE
WHERE NPROVERKI =: NPROV;
/ * Procedure Text * /
end
^
ALTER PROCEDURE NEW_PROCEDURE (
NAZV VARCHAR (70),
LOGIN VARCHAR (20),
FIO VARCHAR (20))
AS
DECLARE VARIABLE NUM INTEGER;
begin
/ * Procedure Text * /
select NPODR
FROM PODRAZD
WHERE NAZVANIE =: nazv
INTO NUM;
insert INTO RABOTNIK (FIO, LOGIN, NPODR)
VALUES (: fio,: login,: NUM);
end
^
ALTER PROCEDURE UPDATEDOCUMENT (
IZMEN VARCHAR (30),
TEMA VARCHAR (30),
NUM INTEGER)
AS
begin
/ * Procedure Text * /
UPDATE document
set DATAIZMEN = 'TODAY', STATUS = 'змінено', TEMATIKA =: TEMA, IZMENENIYA =: izmen
WHERE NDOC =: NUM;
end
^
SET TERM; ^
Клієнтська частина
unit Unit1;
interface
uses
Windows, RzLabel, RzCommon, Unit3, Unit4, DBCtrls, StdCtrls, Controls, Mask,
Grids, DBGrids, ComCtrls,
Classes, Messages, SysUtils, Variants, Graphics, Forms,
Dialogs, Unit2, Unit5, Unit6, Unit7, ExtCtrls, QuickRpt;
type
TForm1 = class (TForm)
PageControl1: TPageControl;
TabSheet1: TTabSheet;
TabSheet2: TTabSheet;
TabSheet3: TTabSheet;
TabSheet4: TTabSheet;
TabSheet5: TTabSheet;
TabSheet6: TTabSheet;
TabSheet7: TTabSheet;
DBGrid1: TDBGrid;
Edit1: TEdit;
Button1: TButton;
Edit2: TEdit;
Button2: TButton;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
DBEdit1: TDBEdit;
MaskEdit1: TMaskEdit;
Label6: TLabel;
Label7: TLabel;
Label8: TLabel;
DBGrid2: TDBGrid;
MaskEdit2: TMaskEdit;
ComboBox1: TComboBox;
ComboBox2: TComboBox;
ComboBox3: TComboBox;
Label9: TLabel;
Label10: TLabel;
Label11: TLabel;
Label12: TLabel;
Label13: TLabel;
Label14: TLabel;
Label15: TLabel;
Label16: TLabel;
Label17: TLabel;
Button3: TButton;
DBEdit3: TDBEdit;
Label18: TLabel;
Button5: TButton;
DBGrid3: TDBGrid;
Edit3: TEdit;
Edit4: TEdit;
Label19: TLabel;
Label20: TLabel;
Label21: TLabel;
Button6: TButton;
DBEdit4: TDBEdit;
Label22: TLabel;
Button7: ​​TButton;
Memo1: TMemo;
DBMemo1: TDBMemo;
Label23: TLabel;
Label24: TLabel;
Label25: TLabel;
Label26: TLabel;
Edit5: TEdit;
Edit6: TEdit;
ComboBox4: TComboBox;
Label27: TLabel;
Label28: TLabel;
Label29: TLabel;
Label30: TLabel;
Label31: TLabel;
Button4: TButton;
DBEdit2: TDBEdit;
Button8: TButton;
DBGrid4: TDBGrid;
DBGrid5: TDBGrid;
Button9: TButton;
Button10: TButton;
Button11: TButton;
Button12: TButton;
DBMemo2: TDBMemo;
Label32: TLabel;
DBEdit5: TDBEdit;
DBGrid6: TDBGrid;
Label33: TLabel;
Button13: TButton;
TabSheet8: TTabSheet;
DBGrid7: TDBGrid;
Button14: TButton;
Panel1: TPanel;
RadioButton1: TRadioButton;
RadioButton2: TRadioButton;
Button15: TButton;
procedure Button1Click (Sender: TObject);
procedure FormCreate (Sender: TObject);
procedure Button2Click (Sender: TObject);
procedure Button6Click (Sender: TObject);
procedure Button7Click (Sender: TObject);
procedure MaskEdit2Change (Sender: TObject);
procedure Button3Click (Sender: TObject);
procedure Button5Click (Sender: TObject);
procedure Edit5Change (Sender: TObject);
procedure Button4Click (Sender: TObject);
procedure Button8Click (Sender: TObject);
procedure Button9Click (Sender: TObject);
procedure Button11Click (Sender: TObject);
procedure Button10Click (Sender: TObject);
procedure Button12Click (Sender: TObject);
procedure Button13Click (Sender: TObject);
rocedure Button14Click (Sender: TObject);
procedure Button15Click (Sender: TObject);
private
{Private declarations}
public
{Public declarations}
end;
var
Form1: TForm1;
implementation
{$ R *. dfm}
procedure TForm1.Button1Click (Sender: TObject);
var
s1: String;
s2: String;
s3: TDateTime;
begin
s1: = Edit1.Text;
s2: = AnsiUpperCase (Edit2.Text);
/ / S3: = StrToDateTime (MaskEdit1.Text);
if ((s1 ='') or (s2 ='') or (s3 = NULL)) then
begin
ShowMessage ('Перевірте заповнення всіх полів');
exit;
end;
s3: = StrToDateTime (MaskEdit1.Text);
try
DM.DobavlenieIBSP.Prepare;
DM.DobavlenieIBSP.ParamByName ('FAMILY'). AsString: = s1;
DM.DobavlenieIBSP.ParamByName ('LOGIN'). AsString: = s2;
DM.DobavlenieIBSP.ParamByName ('DATA'). AsDateTime: = s3;
DM.DobavlenieIBSP.ExecProc;
DM.IBTransaction1.Commit;
DM.IBQuery1.Active: = true;
except
ShowMessage ('Помилка при додаванні !!!');
DM.IBTransaction1.Rollback;
end;
end;
procedure TForm1.FormCreate (Sender: TObject);
begin
MaskEdit1.Text: = 'xx.xx.xx';
Edit1.Text :='';
Edit2.Text :='';
end;
procedure TForm1.Button2Click (Sender: TObject);
begin
try
DM.UdalenieDirIBSP.Prepare;
DM.UdalenieDirIBSP.ParamByName ('FIO'). AsString: = DBEdit1.Text;
DM.UdalenieDirIBSP.ExecProc;
DM.IBTransaction1.Commit;
DM.IBQuery1.Active: = true;
except
ShowMessage ('Помилка при видаленні !!!');
DM.IBTransaction1.Rollback;
end;
end;
procedure TForm1.Button6Click (Sender: TObject);
begin
if ((Edit3.Text ='') or (Edit4.Text ='')) then
begin
ShowMessage ('Перевірте заповнення всіх полів');
exit;
end;
try
DM.AddPodrIBSP.Prepare;
DM.AddPodrIBSP.ParamByName ('NAZV'). AsString: = Edit4.Text;
DM.AddPodrIBSP.ParamByName ('FIO'). AsString: = Edit3.Text;
DM.AddPodrIBSP.ExecProc;
DM.IBTransaction3.Commit;
DM.IBQuery3.Active: = true;
except
ShowMessage ('Помилка при додаванні !!!');
DM.IBTransaction3.Rollback;
end;
end;
procedure TForm1.Button7Click (Sender: TObject);
begin
try
DM.DeletePodrIBSP.Prepare;
DM.DeletePodrIBSP.ParamByName ('Nomer'). AsInteger: = StrToInt (DBEdit4.Text);
DM.DeletePodrIBSP.ExecProc;
DM.IBTransaction3.Commit;
DM.IBQuery3.Active: = true;
except
ShowMessage ('Помилка при додаванні !!!');
DM.IBTransaction3.Rollback;
end;
end;
procedure TForm1.MaskEdit2Change (Sender: TObject);
begin
//--- Прізвище перевіряючого для таблиці "Перевірки "------
Combobox1.Clear;
DM.IBQuery1.Last;
Combobox1.Items.add (DM.IBQuery1.FieldValues ​​['FIO']);
//------------------------------------------------ -----
//--- Проверяемое підрозділ для таблиці "Перевірки "------
Combobox2.Clear;
DM.IBQuery3.first;
while not DM.IBQuery3.Eof do
begin
Combobox2.Items.add (DM.IBQuery3.FieldValues ​​['NAZVANIE']);
DM.IBQuery3.Next;
end;
//------------------------------------------------ -----
//-----------------
Combobox3.Clear;
Combobox3.Items.Add ('значне');
Combobox3.Items.Add ('незначне');
//---------------
/ / DBRichEdit1.Field.Assign (DBRichEdit1.Lines);
end;
procedure TForm1.Button3Click (Sender: TObject);
begin
if ((Combobox1.Text ='') or (Combobox2.Text ='')) then
begin
ShowMessage ('Заповніть обов'язкові для заповнення поля !!!');
exit;
end;
try
DM.InsertProverIBSP.Prepare;
DM.InsertProverIBSP.ParamByName ('NAZVPODR'). AsString: = Combobox2.Text;
DM.InsertProverIBSP.ParamByName ('FIO'). AsString: = Combobox1.Text;
DM.InsertProverIBSP.ParamByName ('VID'). AsString: = Combobox3.Text;
DM.InsertProverIBSP.ParamByName ('DATA'). AsDateTime: = StrToDateTime (MaskEdit2.Text);
DM.InsertProverIBSP.ParamByName ('OPISANIE'). AsString: = Memo1.Text;
DM.InsertProverIBSP.ExecProc;
DM.IBTransaction2.Commit;
DM.IBQuery2.Active: = true;
except
ShowMessage ('Помилка при додаванні !!!');
DM.IBTransaction2.Rollback;
end;
end;
procedure TForm1.Button5Click (Sender: TObject);
begin
try
if (DBEdit3.Text ='') then
begin
ShowMessage ('У таблиці відсутні записи !!!');
exit;
end;
DM.DeleteProvIBSP.Prepare;
DM.DeleteProvIBSP.ParamByName ('NPROVERKI'). AsInteger: = StrToInt (DBEdit3.Text);
DM.DeleteProvIBSP.ExecProc;
DM.IBTransaction2.Commit;
DM.IBQuery2.Active: = true;
except
ShowMessage ('Помилка при видаленні !!!');
DM.IBTransaction2.Rollback;
end;
end;
procedure TForm1.Edit5Change (Sender: TObject);
begin
/ / - Підрозділ до якого працівник приписаний для таблиці "Працівники" ---
Combobox4.Clear;
DM.IBQuery3.first;
while not DM.IBQuery3.Eof do
begin
Combobox4.Items.add (DM.IBQuery3.FieldValues ​​['NAZVANIE']);
DM.IBQuery3.Next;
end;
end;
procedure TForm1.Button4Click (Sender: TObject);
begin
if ((Edit5.Text ='') or (Edit6.Text ='') or (Combobox4.Text ='')) then
begin
ShowMessage ('Необхідно заповнити всі поля !!!');
exit;
end;
try
DM.InsertRabotnikIBSP.Prepare;
DM.InsertRabotnikIBSP.ParamByName ('NAZV'). AsString: = Combobox4.Text;
DM.InsertRabotnikIBSP.ParamByName ('FIO'). AsString: = Edit5.Text;
DM.InsertRabotnikIBSP.ParamByName ('LOGIN'). AsString: = Edit6.Text;
DM.InsertRabotnikIBSP.ExecProc;
DM.IBTransaction4.Commit;
DM.RabotnikIBT.Active: = true;
except
ShowMessage ('Помилка при додаванні !!!');
DM.IBTransaction4.Rollback;
end;
end;
procedure TForm1.Button8Click (Sender: TObject);
begin
try
if (DBEdit2.Text ='') then
begin
ShowMessage ('У таблиці відсутні записи !!!');
exit;
end;
DM.DeleteRabotnikIBSP.Prepare;
DM.DeleteRabotnikIBSP.ParamByName ('NUM'). AsInteger: = StrToInt (DBEdit2.Text);
DM.DeleteRabotnikIBSP.ExecProc;
DM.IBTransaction4.Commit;
DM.RabotnikIBT.Active: = true;
except
ShowMessage ('Помилка при видаленні !!!');
DM.IBTransaction4.Rollback;
end;
end;
procedure TForm1.Button9Click (Sender: TObject);
begin
Form3.Show;
end;
procedure TForm1.Button11Click (Sender: TObject);
begin
Form3.Show;
end;
procedure TForm1.Button10Click (Sender: TObject);
begin
Form4.Show;
end;
procedure TForm1.Button12Click (Sender: TObject);
begin
Form5.Show;
end;
procedure TForm1.Button13Click (Sender: TObject);
begin
try
DM.ClearArhivIBSP.Prepare;
DM.ClearArhivIBSP.ExecProc;
DM.IBTransaction5.Commit;
DM.IBQuery6.Active: = true;
DM.IBQuery5.Active: = true;
DM.IBQuery7.Active: = true;
except
ShowMessage ('Помилка при видаленні !!!');
DM.IBTransaction5.Rollback;
end;
end;
procedure TForm1.Button14Click (Sender: TObject);
begin
try
DM.ClearProtocolIBSP.Prepare;
DM.ClearProtocolIBSP.ExecProc;
DM.IBTransaction5.Commit;
DM.IBQuery7.Active: = true;
DM.IBQuery5.Active: = true;
except
ShowMessage ('Помилка при видаленні !!!');
DM.IBTransaction5.Rollback;
end;
end;
procedure TForm1.Button15Click (Sender: TObject);
begin
if (RadioButton1.Checked) then Form6.QuickRep1.Preview;
if (RadioButton2.Checked) then Form7.QuickRep1.Preview;
end;
end.
procedure TForm3.Button1Click (Sender: TObject);
var
FileViewer: TRzURLLabel;
FileName: String;
begin
/ / Створюємо об'єкт для перегляду файлів
FileViewer: = TRzURLLabel.Create (Form3);
FileName: = DBEdit1.Text;
FileViewer.URL: = FileName;
if FileExists (FileName) then
begin
FileViewer.Click;
end
else
begin
ShowMessage ('Такого файлу не існує або він не поміщений в потрібний каталог (див. інструкцію)');
exit;
end;
//------ ПРОТОКОЛ РОБОТИ --------------------------------------
try
DM.ProtocolIBSP.Prepare;
DM.ProtocolIBSP.ParamByName ('NUMDOC'). AsInteger: = StrToInt (DBEdit2.Text);
DM.ProtocolIBSP.ExecProc;
DM.IBTransaction5.Commit;
DM.IBQuery7.Active: = true;
DM.IBQuery6.Active: = true;
DM.IBQuery5.Active: = true;
except
ShowMessage ('Помилка !!!');
DM.IBTransaction5.Rollback;
end;
//------------------------------------------------ ------------------
end;
procedure TForm3.Button2Click (Sender: TObject);
begin
if ((Memo1.Text ='')) then
begin
ShowMessage ('Необхідно заповнити поле "Характер змін "!!!');
exit;
end;
try
DM.UpdateDocIBSP.Prepare;
DM.UpdateDocIBSP.ParamByName ('NUM'). AsInteger: = StrToInt (DBEdit2.Text);
DM.UpdateDocIBSP.ParamByName ('TEMA'). AsString: = DBEdit5.Text;
DM.UpdateDocIBSP.ParamByName ('IZMEN'). AsString: = Memo1.Text;
DM.UpdateDocIBSP.ExecProc;
DM.IBTransaction5.Commit;
DM.IBQuery5.Active: = true;
except
ShowMessage ('Помилка при оновленні !!!');
DM.IBTransaction5.Rollback;
end;
end;
end.
procedure TForm4.Button1Click (Sender: TObject);
var
s: String;
begin
SaveDialog1.Execute;
Edit1.Text: = SaveDialog1.FileName;
Combobox1.Clear;
Combobox1.Items.Add ('внутрішній');
Combobox1.Items.Add ('нормативний');
end;
procedure TForm4.Button2Click (Sender: TObject);
begin
if ((Edit1.Text ='')) then
begin
ShowMessage ('Необхідно вибрати документ !!!');
exit;
end;
if ((Combobox1.Text ='') or (Edit3.Text ='')) then
begin
ShowMessage ('Заповніть обов'язкові для заповнення поля !!!');
exit;
end;
try
DM.InsertDocIBSP.Prepare;
DM.InsertDocIBSP.ParamByName ('NKLASS'). AsString: = Edit3.Text;
DM.InsertDocIBSP.ParamByName ('TEMA'). AsString: = Edit2.Text;
DM.InsertDocIBSP.ParamByName ('VID'). AsString: = Combobox1.Text;
DM.InsertDocIBSP.ParamByName ('DATA'). AsDateTime: = StrToDateTime (MaskEdit2.Text);
DM.InsertDocIBSP.ParamByName ('NAME'). AsString: = Edit1.Text;
DM.InsertDocIBSP.ExecProc;
DM.IBTransaction5.Commit;
DM.IBQuery5.Active: = true;
except
ShowMessage ('Помилка при додаванні !!!');
DM.IBTransaction5.Rollback;
end;
end;
procedure TForm5.Button1Click (Sender: TObject);
begin
try
DM.DeleteDocIBSP.Prepare;
DM.DeleteDocIBSP.ParamByName ('NUM'). AsInteger: = StrToInt (DBEdit2.Text);
DM.DeleteDocIBSP.ExecProc;
DM.IBTransaction5.Commit;
DM.IBQuery5.Active: = true;
DM.IBQuery6.Active: = true;
DM.IBQuery7.Active: = true;
except
ShowMessage ('Помилка при додаванні !!!');
DM.IBTransaction5.Rollback;
end;
end;

Список використаної літератури
1) Конноллі Т., Бегг К., Страчан А. Бази даних: проектування, реалізація супровід. Теорія і практика: Уч пос.-М.: Видавничий дім «Вільямс», 2000.
2) Дейт К. Введення в системи баз даних. - СПб: Видавничий дім «Вільямс», 1999.
3) Фаронов В.В. Delphi7 і розробка додатків баз даних .- М.: «Нолидж», 2003.


Додати в блог або на сайт

Цей текст може містити помилки.

Програмування, комп'ютери, інформатика і кібернетика | Курсова
225кб. | скачати


Схожі роботи:
Методологія проектування баз даних 2 лютого
Проектування реляційних баз даних
Особливості проектування баз даних
Проектування баз даних MS Access
Основні принципи проектування баз даних
Введення в проектування реляційних баз даних
Теорія проектування віддалених баз даних
Принципи побудови та етапи проектування баз даних
Проектування інформаційних баз даних звіт за відвантаженими товарами
© Усі права захищені
написати до нас