Методологія проектування баз даних 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 - модель

3. Логічне проектування

Передбачається використання реляційної моделі даних. Необхідно позбавитися від структур концептуальної моделі, не реалізованих в рамках реляційної моделі.

Видаляємо зв'язок «Директор служби якості працює з електронними документами», тому що цей зв'язок є транзакцією.

Скоригований ER-модель

Визначення набору відносин

Об'єднаймо підкласи «нормативний документ СМК» і «внутрішній документ СМЯ» в одне ставлення «Електронний документ», тому що всі екземпляри сутностей обох підкласів мають однакові атрибути. Також для цього відношення необхідно визначити новий атрибут «вид документа» для того, щоб ідентифікувати, до якого підкласу стосується документ.

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:

  • Відношення «Перевірки»

Атрибути: опис невідповідності, вид невідповідності

  • Відношення «Протокол роботи»

Атрибути, які є ВК: ПІБ, Назва документу + номер за класифікатором

  • Відношення «Електронні документи»

Атрибути: Дата зміни, статус, тематика, характер зміни

  1. Для всіх ВК: ON UPDATE CASCADE ON DELETE NO ACTION

Крім ВК щодо «Протокол роботи»:

ON UPDATE CASCADE ON DELETE CASCADE

  1. Бізнес-правила:

Директор служби якості має повний доступ до всієї інформації в БД, всі інші працівники мають обмежений доступ, а саме, перегляд документів в режимі читання.

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. Фаронов В. В. Delphi 7 і розробка додатків баз даних .- М.: «Нолидж», 2003.

1 ЗМК - система менеджменту якості

54


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

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

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


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