Реферат по предмету "Информатика"


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

Московский Государственный Технический Университет Им. Н.Э. Баумана
Калужский филиал
Кафедра САУ и электротехники
Методология проектирования баз данных
Расчётно-пояснительная записка к курсовой работе
по курсу «Проектирование алгоритмов и
программного обеспечения»
Выполнил: студент группы САУ-81
Лебедев А.Л.
Руководитель: доцент, к. т. н.
Николаенко С. И.



Калуга
2005 г.
I. Проект базы данных для предприятия, занимающегося заготовкой древесины, её переработкой и сбытом готовой продукции
Деревообрабатывающее предприятие осуществляет заготовку, переработку и сбыт древесины. На предприятии осуществляется бригадный принцип организации труда. Бригада может иметь следующую специализацию: заготовительная, цеховая или погрузочная. Во главе бригад стоят бригадиры. Каждая бригада имеет свой табельный номер.
Заготовка древесины заключается в следующем. Лесничество выделяет предприятию лесобилеты, в которых указано, где находятся делянки и сколько леса может быть заготовлено на каждом участке. Также указывается порода древесины. На предприятии существует определённое лицо – заведующий делянками, — который выписывает у лесничества лесобилеты, выдаёт делянки бригадам, принимает делянки от бригад, сдаёт участки назад лесничеству. Назначенная на данную делянку бригада выпиливает лес и привозит его на базу предприятия.
Привезённый на базу лес сдаётся начальнику базы, который фиксирует кубатуру кругляка.
На территории предприятия находится несколько цехов по переработке древесины, за каждым цехом закреплена сушильная камера; также имеется склад готовой продукции. Цеха пронумерованы. В каждом цехе работает бригада, (в цехе их может быть несколько), которая осуществляет распиловку древесины и её сдачу на склад продукции. Бригадир получает лес от начальника базы. Приём готовой продукции ведёт кладовщик.
На предприятии определено также лицо, которое занимается продажей товара – начальник сбыта. Он договаривается с фирмами-клиентами об объёмах и датах поставок, видах продукции и, соответственно, определяет задание цеховым бригадам.
Работники и фирмы-клиенты могут иметь телефон. Их может быть несколько.
При работе с электронными документами должна быть доступна следующая информация:
штат сотрудников предприятия (таб. №, ФИО, дом. адрес, телефон, дата приёма на работу и назначения на должность, должность, номер бригады);
когда и сколько лесобилетов выписано лесничеством предприятию. В лесобилетах указывается расположение делянок, площадь, порода древесины;
какая бригада работает на делянке;
сколько леса бригада привезла на базу. Сколько всего леса и какого хранится на базе;
какую продукцию и по какой цене производит предприятие;
какой план, когда и на какой срок выдан начальником сбыта цеховым бригадам;
сколько леса выписал начальник бригады на базе и сдал продукции на склад. Сколько и какой продукции хранится на складе;
с какими фирмами-клиентами сотрудничает предприятие (название фирмы, адрес и телефон);
какой заказ и на какой срок сделан предприятию фирмой-клиентом (вид, количество продукции и по какой цене);
какой товар, сколько, по какой цене и когда отгружен фирме-клиенту.
Типовые операции (транзакции)
приём на работу, приписывание к бригадам, назначение на должность, увольнение, снятие с должности работников, перевод в другую бригаду;
создание новых и расформирование старых бригад;
выписывание лесобилетов у лесничества;
выдача делянок бригадам;
приём делянок у бригад;
возвращение делянок лесничеству;
привоз леса бригадой на базу;
выдача плана цеховым бригадам;
получение леса бригадирами на базе;
сдача продукции на склад;
добавление и удаление фирм-клиентов;
получение заказа от фирмы-клиента;
продажа продукции.
Общий вид накладных и других документов
Лесобилет №_____
Лесничество «____________» Предприятие «____________»
Заведующий делянками ____________
Делянка №
Квадрат
Площадь, />
Порода древесины
Кол-во, куб. м.
1
13,36
6000
сосна
50






ель
120






берёза
35
2
Т.д.






«____»___________200 г.
Накладная на возврат делянки №___ лесничеству «____________» №___ от ______
Заведующий делянками ___________
номер делянки
Квадрат
Площадь, />
1
13,36
6000
Накладная на заказ товара №___ от ____
Фирма-заказчик __________Начальник сбыта __________
Адрес фирмы __________
Телефон __________
Наименование
Ед. измерения
Цена
Кол-во
Стоимость
Товар1
пог. м.






Срок выполнения заказа_____
Всего на сумму _______
Накладная на продажу аналогична накладной на заказ, с той лишь разницей, что в ней указывается зав. складом и ставится не срок выполнения заказа, а дата продажи.
Подготовка отчёт о штате сотрудников по форме:
Таб. №
ФИО
Адрес
Телефон
Дата приёма на работу
Таб. № бригады
Должность
Дата назначения на должность--PAGE_BREAK----PAGE_BREAK----PAGE_BREAK----PAGE_BREAK--

--PAGE_BREAK--
номер


телефон
номер


6. Построение ER-модели
/>
IIIЛогическое проектирование
1. Приведение концептуальной модели в соответствие с требованиями реляционной модели данных
1.1 Удаление связей типа M:Nи связей с атрибутами
Связи «Древесина имеется у Бригадир» и «Древесина хранится у Нач. базы» заменяем на тип сущности «Наличие» с наследуемыми атрибутами «Таб. номер» и «Порода» и с собственным атрибутом «Количество» и типы связей «Древесина имеется в Наличие», «Нач. базы имеет в Наличие», «Бригадир имеет в Наличие».
Связь «Древесина указана для Делянка» заменяем на тип сущности «Наличие древесины» с наследуемыми атрибутами «Порода» и «Номер» и собственным атрибутом «Количество» и типы связей «Древесина характеризует Наличие древесины» и «Наличие древесины указано для Делянка»
Связь «Продукция хранится у Зав. складом» заменяем на тип сущности «Хранение» с наследуемыми атрибутами «Наименование» и «Цена» и собственным атрибутом «Количество» и типы связей «Продукция имеется на Хранение» и «Зав. складом имеет на хранение»
Связи «Входит в», связывающие сущности «Продукция» и «Накладная на заказ», «Накладная на продажу» и «План работы» заменяем на типы сущности «Строка накладной на заказ», «Строка накладной на продажу» и «Строка плана работы», типы связей «Продукция входит в Строка накладной на заказ», «Продукция входит в Строка накладной на продажу», «Продукция входит в План работы»; «Накладная на заказ содержит Строка накладной на заказ», «Накладная на продажу содержит Строка накладной на продажу» и «План работы содержит Строка плана работы» соответственно. При этом типы сущности «Строка накладной на заказ», «Строка накладной на продажу» и «Строка плана работы» наследуют атрибуты «Номер», «Наименование», «Цена» и имеют собственный атрибут «Количество».
Связи «Лесобилет содержит Делянка» и «Накладная на возврат делянки лесничеству содержит Делянка» заменяем на два типа сущности «Строка лесобилета» и «Строка накладной на возврат делянки лесничеству» с наследуемыми атрибутами «Номер лесобилета», «Номер накладной» и «Номер делянки» и типы связей «Лесобилет содержит Строка лесобилета» и «Накладная на возврат делянки лесничеству содержит Строка накладной на возврат делянки лесничеству»; «Делянка входит в Строка лесобилета» и «Делянка входит в Строка накладной на возврат делянки лесничеству» соответственно.
Связь «Бригадир сдаёт Продукция» заменяем на тип сущности «Объём товара» с наследуемыми атрибутами «Таб. номер», «Наименование» и «Цена» и типы связей «Продукция входит в Объём товара» и «Бригадир выпускает Объём товара»
Скорректированная таблица «Типы сущностей»
Наименование
Краткое описание
Синонимы
Особенности
древесина
сырьё для продукции
лес, сырьё




лесобилет
документ, который выдаётся лесничеством


нумерация лесобилетов ведётся в рамках текущего года
делянка
место в лесополосе, где предприятию разрешено выпиливание леса
участок
делянки могут возвращаться лесничеству по одной по мере выпиливания в них леса
работник
общее наименование для всех работающих на предприятии


каждый работник входит в состав какой-либо бригады, кроме нач. базы, зав. складом, зав. делянками и нач. сбыта
бригада
основное рабочее звено предприятия


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


эту должность занимает только один работник
нач. базы
работник, который принимает лес и выдаёт лес цеховым бригадам


--//--
зав. складом
работник, который принимает готовую продукцию у цеховых бригад и выдаёт её фирмам- клиентам
кладовщик
--//--
нач. сбыта
работник, который непосредственно сотрудничает с фирмами-клиентами и определяет план работы цеховым бригадам


--//--
продукция
совокупность изделий, которые выпускает предприятие
товар
вся продукция хранится на одном складе, может иметь одинаковое наименование, но разную цену
фирма-клиент
фирмы, которые осуществляют заказ и покупку продукции
фирма-покупатель, фирма-заказчик
делает заказ на продукцию, однако если таковая имеется на складе, может приобрести её сразу
телефон
средство сообщения между лесничеством, фирмами-клиентами и руководящими работниками, а также работников между собой


фирмы-клиенты и работники могут иметь несколько номеров телефонов
накладная на возврат делянки лесничеству
документ, который свидетельствует, что лесничество приняло делянку у предприятия (зав. делянками)


нумерация накладных ведётся в рамках года
накладная на заказ товара
документ, в котором фирма-клиент указывает какую продукцию она хочет приобрести и в какой срок
бланк заказа
--//--
накладная на продажу товара
документ, который выписывает у зав. складом фирма-клиент, где указывается, какую продукцию она хочет приобретает и когда срок


нумерация накладных ведётся в рамках года
план работы цеховой бригады
график работы бригады на неделю
график работы
выдаётся цеховым бригадам
наличие древесины
порода древесины и её количество на делянке
-
-
наличие
количество древесины, имеющееся у бригадира и нач. базы
-
-
объём товара
количество и вид продукции, которое имеет в наличии бригадир




хранение
количество продукции на хранении у зав. складом




строка лесобилета






строка накладной на возврат делянки лесничеству






строка плана работы






строка накладной на заказ






строка накладной на продажу






Скорректированная таблица «Типы связей»    продолжение
--PAGE_BREAK--
Тип сущности
Тип связи
Тип сущности
Кардинальность
Степень участия
наличие древесины
указано для
делянка
M:1
Т: Т
древесина
характеризует
наличие древесины
1:M
T:T
зав. делянками
выписывает
лесобилет
1: М
Т: Т
лесобилет
содержит
строка лесобилета
1: М
Т: Т
делянка
входит в
строка лесобилета
1:1
Т: Т
зав. делянками
оформляет
накладная на возврат делянки лесничеству
1: М
Т: Т
накладная на возврат делянки лесничеству
содержит
строка накладной на возврат делянки лесничеству
1: М
Т: Т
делянка
входит в
строка накладной на возврат делянки лесничеству
1:1
Т: Т
делянка
закреплена за
бригадир
1:1
Т: Р
работник
приписан к
бригада
М:1
T: Т
бригадир
возглавляет
бригада
1:1
Т: Т
бригадир
имеет в
наличие
1: М
Р: Т
нач. базы
имеет в
наличие
1: М
Т: Т
древесина
имеется в
наличие
1: М
Р: Т
бригадир
выпускает
объём товара
1: М
Р: Т
продукция
входит в
объём товара
1: М
Т: Т
продукция
имеется на
хранение
М:1
Р: Т
зав. складом
имеет на
хранение
1:1
Т: Т
фирма-клиент
выписывает
накладная на заказ
1: М
Т: Т
нач. сбыта
оформляет
накладная на заказ
1: М
Т: Т
накладная на заказ
содержит
строка накладной на заказ
1: М
Т: Т
продукция
входит в
строка накладной на заказ
1: М
Т: Т
фирма-клиент
выписывает
накладная на продажу
1: М
Т: Т
зав. складом
оформляет
накладная на продажу
1: М
Т: Т
накладная на продажу
содержит
строка накладной на продажу
1: М
Т: Т
продукция
входит в
строка накладной на продажу
1: М
Т: Т
нач. сбыта
выдаёт
план работы
1: М
Т: Т
план работы
содержит
строка плана работы
1: М
Т: Т
продукция
входит в
строка плана работы
1: М
Т: Т
бригада
получает
план работы
1: М
Р: Т
работник
имеет
телефон
М:1
P: Т
фирма-клиент
имеет
телефон
М:1
T: Т
Ключи
Тип сущности
Первичный ключ
Альтернативные ключи
древесина
порода


лесобилет
номер


делянка
номер
квадрат, площадь
работник
бригадир
зав. делянками
нач. базы
зав. складом
нач. сбыта    продолжение
--PAGE_BREAK--
таб. номер
ФИО, адрес
бригада
таб. номер


продукция
наименование, цена


фирма-клиент
название, адрес


накладная на возврат делянки лесничеству, накладная на заказ и на продажу, план работы
номер


телефон
номер


наличие
слабая сущность
хранение
слабая сущность
строка лесобилета
слабая сущность
строка накладной на возврат делянки лесничеству
слабая сущность
объём товара
слабая сущность
строка накладной на заказ
слабая сущность
строка накладной на продажу
слабая сущность
строка плана работы
слабая сущность
наличие древесины
слабая сущность
2. Построение скорректированной ER – модели
/>
3. Определение наборов отношений
Фирма-клиент (название, адрес, номер телефона)
ПК: название, адрес
ВК: нет
Древесина (порода)
ПК: порода
ВК: нет
Делянка (номер, квадрат, площадь)
ПК: номер
ВК: нет
Работник (таб. номер, ФИО, адрес, телефон, дата поступления, дата назначения, должность, номер бригады)
ПК: таб. номер
ВК: номер бригады ссылается на бригада (номер)
Бригадир (таб. номер, ФИО, адрес, телефон, дата поступления, дата назначения, номер бригады)
ПК: таб. номер
ВК: номер бригады ссылается на бригада (номер)
Бригада (номер, специализация, номер цеха)
ПК: номер
ВК: нет
Продукция (наименование, цена, единицы измерения)
ПК: наименование, цена
ВК: нет
Телефон (номер, название фирмы-клиента, адрес фирмы-клиента, таб. номер работника)
ПК: номер
ВК: название фирмы-клиента, адрес фирмы-клиента ссылается на фирма-клиент (название, адрес)
ВК: таб. номер работника ссылается на работник (таб. номер)
Накладная на заказ (номер, дата, срок, таб. номер нач. сбыта, название фирмы-клиента, адрес фирмы-клиента, номер телефона фирмы-клиента)
ПК: номер
ВК: название фирмы-клиента, адрес фирмы-клиента ссылается на фирма-клиент (название, адрес)
ВК: таб. номер начальника сбыта ссылается на работник(таб. номер)
Строка накладной на заказ (кол-во, наименование продукции, цена продукции, номер накладной)
ПК: номер накладной, наименование продукции, цена продукции
ВК: номер накладной ссылается на накладная на заказ (номер)
ВК: наименование продукции, цена продукции ссылается на продукция (наименование, цена)
Накладная на продажу (номер, дата, таб. номер зав. складом, название фирмы-клиента, адрес фирмы-клиента, номер телефона фирмы-клиента)
ПК: номер
ВК: название фирмы-клиента, адрес фирмы-клиента ссылается на фирма-клиент(название, адрес)
ВК: таб. номер зав. складом ссылается на работник(таб. номер)
Строка накладной на продажу(кол-во, наименование продукции, цена продукции, номер накладной)
ПК: номер накладной, наименование продукции, цена продукции
ВК: номер накладной ссылается на накладная на продажу(номер)
ВК: наименование продукции, цена продукции ссылается на продукция(наименование, цена)
План работы(номер, дата, срок, объём древесины, таб. номер нач. сбыта, номер бригады)
ПК: номер
ВК: таб. номер начальника сбыта ссылается на работник(таб. номер)
ВК: номер бригады ссылается на бригада(номер)
Строка плана работы(кол-во, наименование продукции, цена продукции, номер плана)
ПК: номер плана, наименование продукции, цена продукции
ВК: номер плана ссылается на план работы(номер)
ВК: наименование продукции, цена продукции ссылается на продукция(наименование, цена)
Объём товара(кол-во, таб. номер бригадира, наименование продукции, цена продукции)
ПК: таб. номер бригадира, наименование продукции, цена продукции
ВК: таб. номер бригадира ссылается на работник(таб. номер)
ВК: наименование продукции, цена продукции ссылается на продукция(наименование, цена)
Наличие древесины(кол-во, порода, номер делянки)
ПК: номер делянки, порода
ВК: номер делянки ссылается на делянка(номер)
ВК: порода ссылается на древесина(порода)
Лесобилет(номер, таб. номер зав. делянками, дата)
ПК: номер
ВК: таб. номер зав. делянками ссылается на работник(таб. номер)
Строка лесобилета(номер лесобилета, номер делянки)
ПК: номер лесобилета, номер делянки
ВК: номер лесобилета ссылается на лесобилет(номер)
ВК: номер делянки ссылается на делянка(номер)
Накладная на возврат делянки лесничеству(номер, таб. номер зав. делянками, дата)
ПК: номер
ВК: таб. номер зав. делянками ссылается на работник(таб. номер)
Строка накладной на возврат делянки лесничеству(номер накладной, номер делянки)
ПК: номер накладной, номер делянки
ВК: номер накладной ссылается на накладная на возврат делянки лесничеству(номер)    продолжение
--PAGE_BREAK--
ВК: номер делянки ссылается на делянка(номер)
Наличие(таб. номер бригадира, таб.номер нач. базы, порода, кол-во)
ПК: таб. бригадира, таб.номер нач. базы, порода
ВК: таб. номер бригадира ссылается на бригадир(таб. номер)
ВК: таб. номер нач. базы ссылается на работник(таб. номер)
ВК: порода ссылается на древесина(порода)
Хранение(таб. номер зав. складом, наименование продукции, цена продукции, кол-во)
ПК: наименование продукции, цена продукции
ВК: таб. номер зав. складом ссылается на работник(таб. номер)
ВК: наименование продукции, цена продукции ссылается на продукция(наименование, цена)
4. Проверка набора отношений на соответствие требованиям нормализации
Для каждого из отношений выпишем функциональные зависимости.
Фирма-клиент
название, адрес – номер телефона
Древесина
порода –
Делянка
номер – квадрат
номер – площадь
Работник
таб. номер – ФИО
таб. номер – адрес
таб. номер – телефон
таб. номер – дата поступления
таб. номер – дата назначения
таб. номер – должность
таб. номер – номер бригады
Бригадир
таб. номер – ФИО
таб. номер – адрес
таб. номер – телефон
таб. номер – дата поступления
таб. номер – дата назначения
таб. номер – номер бригады
Бригада
номер – специализация
номер – номер цеха
Продукция
наименование, цена – единицы измерения
Телефон
номер – название фирмы-клиента
номер – адрес фирмы-клиента
номер – таб. номер работника
Накладная на заказ
номер – дата
номер – срок
номер – таб. номер начальника сбыта
номер – название фирмы-клиента
номер – адрес фирмы-клиента
номер – телефон фирмы-клиента
Строка накладной на заказ
номер накладной, наименование продукции, цена продукции – количество
Накладная на продажу
номер – дата
номер – таб. номер зав. складом
номер – название фирмы-клиента
номер – адрес фирмы-клиента
номер – телефон фирмы-клиента
Строка накладной на продажу
номер накладной, наименование продукции, цена продукции – количество
План работы
номер – дата
номер – срок
номер – таб. номер нач. сбыта
номер – номер бригады
Строка плана работы
номер плана, наименование продукции, цена продукции – количество
номер плана, наименование продукции, цена продукции – объём древесины
Объём товара
таб. номер бригадира, наименование продукции, цена продукции – количество
Наличие древесины
номер делянки, порода – количество
Лесобилет
номер – таб. номер зав. делянками
номер – дата
Строка лесобилета
номер лесобилета, номер делянки –
Накладная на возврат делянки лесничеству
номер – таб. номер зав. делянками
номер – дата
Строка накладной на возврат делянки лесничеству
номер накладной, номер делянки
Наличие
таб. номер бригадира, таб. номер нач. базы, порода – количество
Хранение
таб. номер зав. складом, наименование продукции, цена продукции – количество
5. Проверка модели на возможность выполнения всех транзакций
Для каждой транзакции на ER-модели обозначим путь её выполнения.
/>
6. Построение окончательного варианта ER – модели
ER–модель, изображённую в пункте 2 логического проектирования будет окончательным вариантом, т.к. пунктах 3 -5 ER– модель не претерпела никаких изменений.
7. Определение набора ограничений целостности
1 Обязательные данные.К ним относятся все атрибуты, составляющие первичные ключи + ещё некоторые атрибуты, которые по постановке задачи или из смысловых соображений не могут быть пустыми (см. таблицу «Атрибуты» и таблицу ниже).
Тип сущности/
связи
Атрибут
Описание
Тип данных
строка накладной на заказ
количество
количество товара
плавающий
строка накладной на продажу
количество
количество товара
плавающий
строка плана работы
количество
количество товара
плавающий
хранение
кол-во
кол-во продукции у зав. складом
плавающий
наличие
кол-во
кол-во древесины у бригадира или нач. базы
плавающий
объём товара
кол-во
кол-во продукции, которое имеется у бригадира
плавающий
наличие древесины
кол-во
кол-во древесины на делянке
плавающий     продолжение
--PAGE_BREAK--
2 Ограничение доменов атрибутов
См. таблицу доменов.
3 Ограничение ссылочной целостности
Для всех внешних ключей определим действие на случай удаления или изменения родительских записей.
Работник
ВК: номер бригады ссылается на бригада(номер)
при изменении CASCADE, при удалении NO ACTION
Бригадир
ВК: номер бригады ссылается на бригада(номер)
при изменении CASCADE, при удалении NO ACTION
Телефон
ВК: название фирмы-клиента, адрес фирмы-клиента ссылается на фирма-клиент(название, адрес)
при изменении CASCADE, при удалении CASCADE
ВК: таб. номер работника ссылается на работник(таб. номер)
при изменении CASCADE, при удалении CASCADE
Накладная на заказ
ВК: название фирмы-клиента, адрес фирмы-клиента ссылается на фирма-клиент(название, адрес)
при изменении NO ACTION, при удалении NO ACTION
ВК: таб. номер начальника сбыта ссылается на работник(таб. номер)
при изменении CASCADE, при удалении NO ACTION
Строка накладной на заказ
ВК: номер накладной ссылается на накладная на заказ(номер)
при изменении CASCADE, при удалении NO ACTION
ВК: наименование продукции, цена продукции ссылается на продукция(наименование, цена)
при изменении NO ACTION, при удалении NO ACTION
Накладная на продажу
ВК: название фирмы-клиента, адрес фирмы-клиента ссылается на фирма-клиент(название, адрес)
при изменении NO ACTION, при удалении NO ACTION
ВК: таб. номер зав. складом ссылается на работник(таб. номер)
при изменении CASCADE, при удалении NO ACTION
Строка накладной на продажу
ВК: номер накладной ссылается на накладная на продажу(номер)
при изменении CASCADE, при удалении NO ACTION
ВК: наименование продукции, цена продукции ссылается на продукция(наименование, цена)
при изменении NO ACTION, при удалении NO ACTION
План работы
ВК: таб. номер начальника сбыта ссылается на работник(таб. номер)
при изменении CASCADE, при удалении NO ACTION
ВК: номер бригады ссылается на бригада(номер)
при изменении CASCADE, при удалении NO ACTION
Строка плана работы
ВК: номер плана ссылается на план работы(номер)
при изменении CASCADE, при удалении NO ACTION
ВК: наименование продукции, цена продукции ссылается на продукция(наименование, цена)
при изменении NO ACTION, при удалении NO ACTION
Объём товара
ВК: таб. номер бригадира ссылается на работник(таб. номер)
при изменении CASCADE, при удалении NO ACTION
ВК: наименование продукции, цена продукции ссылается на продукция(наименование, цена)
при изменении NO ACTION, при удалении NO ACTION
Наличие древесины
ВК: номер делянки ссылается на делянка(номер)
при изменении CASCADE, при удалении NO ACTION
ВК: порода ссылается на древесина(порода)
при изменении NO ACTION, при удалении NO ACTION
Лесобилет
ВК: таб. номер зав. делянками ссылается на работник(таб. номер)
при изменении CASCADE, при удалении NO ACTION
Строка лесобилета
ВК: номер лесобилета ссылается на лесобилет(номер)
при изменении CASCADE, при удалении NO ACTION
ВК: номер делянки ссылается на делянка(номер)
при изменении CASCADE, при удалении NO ACTION
Накладная на возврат делянки лесничеству
ВК: таб. номер зав. делянками ссылается на работник(таб. номер)
при изменении CASCADE, при удалении NO ACTION
Строка накладной на возврат делянки лесничеству
ВК: номер накладной ссылается на накладная на возврат делянки лесничеству(номер)
при изменении CASCADE, при удалении NO ACTION
ВК: номер делянки ссылается на делянка(номер)
при изменении CASCADE, при удалении NO ACTION
Наличие
ВК: таб. номер работника ссылается на работник(таб. номер)
при изменении CASCADE, при удалении NO ACTION
ВК: порода ссылается на древесина(порода)
при изменении NO ACTION, при удалении NO ACTION
Хранение
ВК: таб. номер зав. складом ссылается на работник(таб. номер)
при изменении CASCADE, при удалении NO ACTION
ВК: наименование продукции, цена продукции ссылается на продукция(наименование, цена)
при изменении NO ACTION, при удалении NO ACTION    продолжение
--PAGE_BREAK--
4 Бизнес правила
Недопустимо, чтобы работники одновременно были приписаны к нескольким бригадам или один работник занимал несколько должностей, было несколько зав. складом, зав. делянками, нач. базы и нач. сбыта, бригады получали делянки, которые уже выпилены, чтобы количество древесины и продукции передавалось больше, чем есть в наличии и т.д.
IVФизическое проектирование
1. Введение контролируемой избыточности
1. Замена ПК семантически незначащими атрибутами
Т.к. значение первичного ключа «Таб. номер» для типа экземпляра сущности «Работник» освобождается, например, при увольнении работника, но в качестве внешнего ключа может встречаться в одной или нескольких дочерних таблицах, то были введён суррогатный ключ «Условный номер» и новый атрибут «Уволен» для логического удаления работника.
Чтобы не отслеживать уникальность первичного ключа в таблицах «Работник» и «Бригадир», они были объединены в одну таблицу «Работник». В то же время, для уменьшения объёма таблицы «Работник» совокупность значений атрибута «Должность» было выделено в отдельную таблицу «Должность» с полями «Условный номер», «Название» и «Занята». Последнее поле служит для контроля выполнения бизнес-правил.
Те же действия были проведены и в отношении типа сущности «Бригада».
Для таблиц «Фирма-клиент» и «Продукция» также были введены суррогатные ключи «Условный номер» и атрибут «Удалён» для повышения скорости выполнения запросов и логического удаления кортежей отношений.
Для таблиц «План работы», «Делянка» были введены дополнительные атрибуты «Выполнен» и «Выпилена» для контроля выполнения бизнес-правил.
В таблице «Древесина» первичный ключ «Порода» был заменён на суррогатный «Условный номер» для уменьшения объёма дочерних таблиц.
В таблице «Хранение» ввиду своей бесполезности был удалён внешний ключ «Таб. номер зав. складом».
2 Создание таблиц и реализация ограничений
Создание таблиц и реализация ограничений, в соответствие с ранее определённым набором отношений, при помощи выбранной СУБД.В качестве СУБД выберем InterBase 6.0.
Скрипты создания таблиц
Замечание: различного рода ограничения реализуются с помощью доменов, триггеров и хранимых процедур.
CREATE TABLE «Brigada» (
«Usl_nomer» INTEGER NOT NULL,
«Specialisacia» VARCHAR(20) NOT NULL,
«Nomer_Ceha» INTEGER,
«N_Brigada» INTEGER NOT NULL,
«Uv» «Bool» NOT NULL);
ALTER TABLE «Brigada» ADD CONSTRAINT «FK_Brigada» PRIMARY KEY («Usl_nomer»);
CREATE TABLE «Delanka» (
«Numer» «Nomer»,
«Kvadrat» VARCHAR(5) NOT NULL,
«Plotschad» DOUBLE PRECISION NOT NULL,
«NBrigadir» INTEGER,
«Isp» SMALLINT DEFAULT 0 NOT NULL);
ALTER TABLE «Delanka» ADD CONSTRAINT «FK_Delanka» PRIMARY KEY («Numer»);
ALTER TABLE «Delanka» ADD CONSTRAINT «FK_N_Brigadir_Delanka» FOREIGN KEY («NBrigadir») REFERENCES «Rabotnik» («Usl_nomer») ON DELETE CASCADE ON UPDATE CASCADE;
CREATE TABLE «Dolgnost» (
«Zanata» «Bool»,
«N_Dolgn» INTEGER NOT NULL,
«Name_Dolgn» VARCHAR(20) NOT NULL COLLATE PXW_CYRL);
ALTER TABLE «Dolgnost» ADD CONSTRAINT «FK_Dolgnost» PRIMARY KEY («N_Dolgn»);
CREATE TABLE «Drevesina» (
«Poroda» VARCHAR(20) NOT NULL,
«Usl_nomer» INTEGER NOT NULL);
ALTER TABLE «Drevesina» ADD CONSTRAINT «FK_Drevesina» PRIMARY KEY («Usl_nomer»);
CREATE TABLE «Hranenie» (
«N_Produkcia» INTEGER NOT NULL,
«Kolvo» DOUBLE PRECISION NOT NULL);
ALTER TABLE «Hranenie» ADD CONSTRAINT «FK_Hranenie» PRIMARY KEY («N_Produkcia»);
ALTER TABLE «Hranenie» ADD CONSTRAINT «FK_N_Produkcia_Hranenie» FOREIGN KEY («N_Produkcia») REFERENCES «Produkcia» («Usl_nomer») ON UPDATE CASCADE;
CREATE TABLE «Klient» (
«Usl_nomer» INTEGER NOT NULL,
«Name» FIO COLLATE PXW_CYRL,
«Adres» «Adress» COLLATE PXW_CYRL,
«Uvolen» «Bool» NOT NULL);
ALTER TABLE «Klient» ADD CONSTRAINT «FK_Klient» PRIMARY KEY («Usl_nomer»);
CREATE TABLE «Lesobilet» (
«Numer» «Nomer»,
«Data» DATE NOT NULL,
«N_Zav_Delankami» INTEGER NOT NULL);
ALTER TABLE «Lesobilet» ADD CONSTRAINT «PK_Lesobilet» PRIMARY KEY («Numer»);
ALTER TABLE «Lesobilet» ADD CONSTRAINT «FK_N_Zav_Del_Lesobilet» FOREIGN KEY («N_Zav_Delankami») REFERENCES «Rabotnik» («Usl_nomer») ON UPDATE CASCADE;
CREATE TABLE «Naklad_Lesnichestvo» (
«Numer» «Nomer»,
«Data» DATE NOT NULL,
«N_Zav_Delankami» INTEGER NOT NULL);
ALTER TABLE «Naklad_Lesnichestvo» ADD CONSTRAINT «PK_Naklad_Lesnichestvo» PRIMARY KEY («Numer»);
ALTER TABLE «Naklad_Lesnichestvo» ADD CONSTRAINT «FK_N_Zav_Del_Naklad_Lesn» FOREIGN KEY («N_Zav_Delankami») REFERENCES «Rabotnik» («Usl_nomer») ON UPDATE CASCADE;
CREATE TABLE «Naklad_Prodaga» (
«Data» DATE NOT NULL,
«N_Firma» INTEGER NOT NULL,
«Numer» «Nomer» NOT NULL,
«N_Zav_Skladom» INTEGER NOT NULL);
ALTER TABLE «Naklad_Prodaga» ADD CONSTRAINT «PK_Naklad_Prodaga» PRIMARY KEY («Numer»);
ALTER TABLE «Naklad_Prodaga» ADD CONSTRAINT «FK_N_Firma_Nakl_Prodaga» FOREIGN KEY («N_Firma») REFERENCES «Klient» («Usl_nomer») ON UPDATE CASCADE;
ALTER TABLE «Naklad_Prodaga» ADD CONSTRAINT «FK_N_Zav_Skl_Naklad_Prodaga» FOREIGN KEY («N_Zav_Skladom») REFERENCES «Rabotnik» («Usl_nomer») ON UPDATE CASCADE;
CREATE TABLE «Naklad_Zakaz» (
«Numer» «Nomer»,
«Data» DATE NOT NULL,    продолжение
--PAGE_BREAK--
«Srok» INTEGER NOT NULL,
«N_Firma» INTEGER NOT NULL,
«N_Nach_Sbita» INTEGER NOT NULL);
ALTER TABLE «Naklad_Zakaz» ADD CONSTRAINT «FK_Naklad_Zakaz» PRIMARY KEY («Numer»);
ALTER TABLE «Naklad_Zakaz» ADD CONSTRAINT «FK_N_Firma_Nakl_Zakaz» FOREIGN KEY («N_Firma») REFERENCES «Klient» («Usl_nomer») ON UPDATE CASCADE;
ALTER TABLE «Naklad_Zakaz» ADD CONSTRAINT «FK_N_Nach_Sbita_Nakl_Zakaz» FOREIGN KEY («N_Nach_Sbita») REFERENCES «Rabotnik» («Usl_nomer») ON UPDATE CASCADE;
CREATE TABLE «Nalichie» (
«N_Brigadir» INTEGER,
«N_Nach_Baza» INTEGER,
«N_Drevesina» INTEGER NOT NULL,
«Kolvo» INTEGER NOT NULL);
ALTER TABLE «Nalichie» ADD CONSTRAINT «FK_N_Brigadir» FOREIGN KEY («N_Brigadir») REFERENCES «Rabotnik» («Usl_nomer») ON UPDATE CASCADE;
ALTER TABLE «Nalichie» ADD CONSTRAINT «FK_N_Drevesina_Nalichie» FOREIGN KEY («N_Drevesina») REFERENCES «Drevesina» («Usl_nomer») ON UPDATE CASCADE;
ALTER TABLE «Nalichie» ADD CONSTRAINT «FK_N_Nach_Bazi» FOREIGN KEY («N_Nach_Baza») REFERENCES «Rabotnik» («Usl_nomer») ON UPDATE CASCADE;
CREATE TABLE «Nalichie_Drevesina» (
«N_Drevesina» INTEGER NOT NULL,
«N_Delanka» INTEGER NOT NULL,
«Kolvo» DOUBLE PRECISION NOT NULL);
ALTER TABLE «Nalichie_Drevesina» ADD CONSTRAINT «FK_Nalichie_Drevesina» PRIMARY KEY («N_Drevesina», «N_Delanka»);
ALTER TABLE «Nalichie_Drevesina» ADD CONSTRAINT «FK_N_Delanka_Nal_Drev» FOREIGN KEY («N_Delanka») REFERENCES «Delanka» («Numer») ON UPDATE CASCADE;
ALTER TABLE «Nalichie_Drevesina» ADD CONSTRAINT «FK_N_Drevesina_Nal_Drev» FOREIGN KEY («N_Drevesina») REFERENCES «Drevesina» («Usl_nomer») ON UPDATE CASCADE;
CREATE TABLE «Objem» (
«N_Brigadir» INTEGER NOT NULL,
«N_Produkcia» INTEGER NOT NULL,
«Kolvo» DOUBLE PRECISION NOT NULL);
ALTER TABLE «Objem» ADD CONSTRAINT «FK_Objem» PRIMARY KEY («N_Brigadir», «N_Produkcia»);
ALTER TABLE «Objem» ADD CONSTRAINT «FK_N_Brigadir_Objem» FOREIGN KEY («N_Brigadir») REFERENCES «Rabotnik» («Usl_nomer») ON UPDATE CASCADE;
ALTER TABLE «Objem» ADD CONSTRAINT «FK_N_Produkcia_Objem» FOREIGN KEY («N_Produkcia») REFERENCES «Produkcia» («Usl_nomer») ON UPDATE CASCADE;
CREATE TABLE «Plan» (
«Numer» «Nomer»,
«Data» DATE NOT NULL,
«Srok» INTEGER NOT NULL,
«N_Brigada» INTEGER NOT NULL,
«Objem_Drevesini» DOUBLE PRECISION NOT NULL,
«Isp» SMALLINT DEFAULT 0 NOT NULL,
«N_Nach_Sbita» INTEGER NOT NULL);
ALTER TABLE «Plan» ADD CONSTRAINT «FK_Plan» PRIMARY KEY («Numer»);
ALTER TABLE «Plan» ADD CONSTRAINT «FK_N_Brigada_Plan» FOREIGN KEY («N_Brigada») REFERENCES «Brigada» («Usl_nomer») ON UPDATE CASCADE;
ALTER TABLE «Plan» ADD CONSTRAINT «FK_N_Nach_Sbita_Plan» FOREIGN KEY («N_Nach_Sbita») REFERENCES «Rabotnik» («Usl_nomer») ON UPDATE CASCADE;
CREATE TABLE «Produkcia» (
«Usl_nomer» INTEGER NOT NULL,
«Name» FIO,
«Cena» DOUBLE PRECISION NOT NULL,
«Ed_Izm» VARCHAR(10) NOT NULL,
«Old» SMALLINT DEFAULT 0 NOT NULL);
ALTER TABLE «Produkcia» ADD CONSTRAINT «FK_Produkcia» PRIMARY KEY («Usl_nomer»);
CREATE TABLE «Rabotnik» (
«Usl_nomer» INTEGER NOT NULL,
«Tab_numer» «Tab_nomer»,
«R_Fio» FIO COLLATE PXW_CYRL,
«Adres» «Adress» COLLATE PXW_CYRL,
«Data_Postup» DATE NOT NULL,
«Data_Nazn» DATE,
«Dolgnost» INTEGER,
«N_Brigadi» INTEGER,
«Uvolen» «Bool» NOT NULL);
ALTER TABLE «Rabotnik» ADD CONSTRAINT «FK_Rabotnik» PRIMARY KEY («Usl_nomer»);
ALTER TABLE «Rabotnik» ADD CONSTRAINT «FK_N_Brigada» FOREIGN KEY («N_Brigadi») REFERENCES «Brigada» («Usl_nomer») ON UPDATE CASCADE;
ALTER TABLE «Rabotnik» ADD CONSTRAINT «FK_N_Dolgnost» FOREIGN KEY («Dolgnost») REFERENCES «Dolgnost» («N_Dolgn») ON UPDATE CASCADE;
CREATE TABLE «Stroka_Lesn» (
«N_Naklad_Lesn» INTEGER NOT NULL,
«N_Delanka» INTEGER NOT NULL);
ALTER TABLE «Stroka_Lesn» ADD CONSTRAINT «FK_Stroka_Lesn» PRIMARY KEY («N_Naklad_Lesn», «N_Delanka»);
ALTER TABLE «Stroka_Lesn» ADD CONSTRAINT «FK_N_Delanka_Stroka_Lesn» FOREIGN KEY («N_Delanka») REFERENCES «Delanka» («Numer») ON UPDATE CASCADE;
ALTER TABLE «Stroka_Lesn» ADD CONSTRAINT «FK_N_Nakl_Lesn_Stroka_Lesn» FOREIGN KEY («N_Naklad_Lesn») REFERENCES «Naklad_Lesnichestvo» («Numer») ON UPDATE CASCADE;
CREATE TABLE «Stroka_Lesobilet» (
«N_Lesobilet» INTEGER NOT NULL,
«N_Delanka» INTEGER NOT NULL);
ALTER TABLE «Stroka_Lesobilet» ADD CONSTRAINT «FK_Stroka_Lesobilet» PRIMARY KEY («N_Lesobilet», «N_Delanka»);
ALTER TABLE «Stroka_Lesobilet» ADD CONSTRAINT «FK_N_Delanka_Str_Bilet» FOREIGN KEY («N_Delanka») REFERENCES «Delanka» («Numer») ON UPDATE CASCADE;
ALTER TABLE «Stroka_Lesobilet» ADD CONSTRAINT «FK_N_Lesobilet_Str_Bilet» FOREIGN KEY («N_Lesobilet») REFERENCES «Lesobilet» («Numer») ON UPDATE CASCADE;
CREATE TABLE «Stroka_Plana» (
«N_Plan» INTEGER NOT NULL,
«N_Produkcia» INTEGER NOT NULL,    продолжение
--PAGE_BREAK--
«Kolvo» DOUBLE PRECISION NOT NULL);
ALTER TABLE «Stroka_Plana» ADD CONSTRAINT «FK_Stroka_Plana» PRIMARY KEY («N_Plan», «N_Produkcia»);
ALTER TABLE «Stroka_Plana» ADD CONSTRAINT «FK_N_Plan_Stroka_Plana» FOREIGN KEY («N_Plan») REFERENCES «Plan» («Numer») ON UPDATE CASCADE;
ALTER TABLE «Stroka_Plana» ADD CONSTRAINT «FK_N_Produkcia_Stroka_Plana» FOREIGN KEY («N_Produkcia») REFERENCES «Produkcia» («Usl_nomer») ON UPDATE CASCADE;
CREATE TABLE «Stroka_Prodaga» (
«N_Naklad_Prodaga» INTEGER NOT NULL,
«N_Produkcia» INTEGER NOT NULL,
«Kolvo» DOUBLE PRECISION NOT NULL);
ALTER TABLE «Stroka_Prodaga» ADD CONSTRAINT «FK_Stroka_Prodaga» PRIMARY KEY («N_Naklad_Prodaga», «N_Produkcia»);
ALTER TABLE «Stroka_Prodaga» ADD CONSTRAINT «FK_N_Produkcia_Str_Prod» FOREIGN KEY («N_Produkcia») REFERENCES «Produkcia» («Usl_nomer») ON UPDATE CASCADE;
CREATE TABLE «Stroka_Zakaz» (
«N_Naklad_Zakaz» INTEGER NOT NULL,
«N_Produkcia» INTEGER NOT NULL,
«Kolvo» DOUBLE PRECISION NOT NULL);
ALTER TABLE «Stroka_Zakaz» ADD CONSTRAINT «FK_Stroka_Zakaz» PRIMARY KEY («N_Naklad_Zakaz», «N_Produkcia»);
ALTER TABLE «Stroka_Zakaz» ADD CONSTRAINT «FK_N_Nakl_Z_Stroka_Zakaz» FOREIGN KEY («N_Naklad_Zakaz») REFERENCES «Naklad_Zakaz» («Numer») ON UPDATE CASCADE;
ALTER TABLE «Stroka_Zakaz» ADD CONSTRAINT «FK_N_Produkcia_Stroka_Zakaz» FOREIGN KEY («N_Produkcia») REFERENCES «rodukcia» («Usl_nomer») ON UPDATE CASCADE;
CREATE TABLE «Telefon» (
«Nomer» «Nomer_Tlf» NOT NULL,
«N_Firma» INTEGER,
«N_Rabotnik» INTEGER);
ALTER TABLE «Telefon» ADD CONSTRAINT «PK_Telefon» PRIMARY KEY («Nomer»);
ALTER TABLE «Telefon» ADD CONSTRAINT «FK_N_Rabotnik_Tlf» FOREIGN KEY («N_Rabotnik») REFERENCES «Rabotnik» («Usl_nomer») ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE «Telefon» ADD CONSTRAINT «FK_N_firma_Tlf» FOREIGN KEY («N_Firma») REFERENCES «Klient» («Usl_nomer») ON DELETE CASCADE ON UPDATE CASCADE;
3 Создание вторичных индексов
Для повышения производительности в таблицах «Работник», «Продукция», «Клиент» были созданы вторичные индексы.
Скрипты создания вторичных индексов
CREATE INDEX "Rabotnik_IDX1" ON "Rabotnik" ("R_Fio");
CREATE INDEX «Rabotnik_IDX2» ON «Rabotnik» («Adres»);
CREATE INDEX «Produkcia_IDX1» ON «Produkcia» («Name»);
CREATE INDEX «Produkcia_IDX2» ON «Produkcia» («Cena»);
CREATE UNIQUE INDEX «Klient_IDX1» ON «Klient» («Name»);
CREATE INDEX «Klient_IDX2» ON «Klient» («Adres»);
4 Права доступа
Транзакции 1,2 выполняет отдел кадров
Транзакции 3-6 — зав. делянками
Транзакции 9,7 — нач. базы
Транзакции 8,11,12 — нач. сбыта
Транзакции 10,13 — зав. складом
Приведем примеры таблиц и хранимых процедур.
Листинг процедуры добавления накладной на заказ товара
procedure TDob_Nakl_Zakaz.Button1Click(Sender: TObject);
var i,j:Integer;
Ok:Boolean;
begin
Ok:=False;
if(not DM4.IBTrans_Write.Active)
then DM4.IBTrans_Write.StartTransaction;
j:=0;
if((StringReplace(MaskEdit1.EditText,' ','',[rfReplaceAll])'') and
(StringReplace(MaskEdit2.EditText,' ','',[rfReplaceAll])''))
then
begin
DM4.IBSP_Dob_Nakl_Z.ParamByName('Name').AsString:=
ComboBox1.Text;
DM4.IBSP_Dob_Nakl_Z.ParamByName('Adres').AsString:=
Edit2.Text;
DM4.IBSP_Dob_Nakl_Z.ParamByName('Nomer').AsInteger:=
StrToInt(StringReplace(MaskEdit1.Text,' ','',[rfReplaceAll]));
DM4.IBSP_Dob_Nakl_Z.ParamByName('Srok').AsInteger:=
StrToInt(StringReplace(MaskEdit2.Text,' ','',[rfReplaceAll]));
DM4.IBSP_Dob_Nakl_Z.ParamByName('Data').AsDate:=
DateTimePicker1.Date;
try
DM4.IBSP_Dob_Nakl_Z.Prepare;
DM4.IBSP_Dob_Nakl_Z.ExecProc;
Ok:=True;
if(Ok) then
begin
for i:=1 to ValueListEditor1.RowCount-1 do
begin
if(StringReplace(StringReplace(ValueListEditor1.Values[ValueListEditor1.Keys[i]],' ','',[rfReplaceAll]),'.',',',[rfReplaceAll])'')
then
begin
DM4.IBSP_Dob_Str_Nakl_Z.ParamByName('NNakl_Zakaz').AsInteger:=
StrToInt(StringReplace(MaskEdit1.EditText,' ','',[rfReplaceAll]));
DM4.IBSP_Dob_Str_Nakl_Z.ParamByName('Naimen').AsString:=
ValueListEditor1.Keys[i];
DM4.IBSP_Dob_Str_Nakl_Z.ParamByName('Kolvo').AsFloat:=
StrToFloat(StringReplace(StringReplace(ValueListEditor1.Values[ValueListEditor1.Keys[i]],' ','',[rfReplaceAll]),'.',',',[rfReplaceAll]));
DM4.IBSP_Dob_Str_Nakl_Z.ParamByName('Cena').AsFloat:=    продолжение
--PAGE_BREAK--
StrToFloat(ListBox1.Items[i-1]);
DM4.IBSP_Dob_Str_Nakl_Z.Prepare;
DM4.IBSP_Dob_Str_Nakl_Z.ExecProc;
j:=j+1;
end;
end
end;
if((Ok) and (j0))
then
DM4.IBTrans_Write.Commit
else ShowMessage('Ошибка добавления накладной !');
except
on E: Exception do
begin
if(Pos('Накладная с таким номером уже есть !!!',E.Message)0) then
ShowMessage(' Накладная с таким номером уже есть !')
else
ShowMessage('ОшибкаБД');
DM4.IBTrans_Write.Rollback;
end;
end;
end
else ShowMessage('Введите номер накладной или срок выполнения !');
end;
Листинг процедуры добавления лесобилета
procedure TDob_Lesobilet.Button1Click(Sender: TObject);
var i,j:Integer;
begin
if(not DM1.IBTrans_Write.Active)
then DM1.IBTrans_Write.StartTransaction;
j:=0;
try
if(Kol_Del=0) then
begin
if(Trim(MaskEdit1.EditText)'') then
begin
DM1.IBSP_Dob_Lesobilet.ParamByName('Nomer').AsInteger:=
StrToInt(Trim(MaskEdit1.EditText));
DM1.IBSP_Dob_Lesobilet.ParamByName('Data').AsDate:=
DateTimePicker1.Date;
DM1.IBSP_Dob_Lesobilet.Prepare;
DM1.IBSP_Dob_Lesobilet.ExecProc;
Ok:=True;
MaskEdit1.ReadOnly:=True;
Kol_Del:=Kol_Del+1;
end
else
begin
ShowMessage('Введите номер лесобилета !');
Ok:=False;
end
end;
if((Ok) and (Trim(MaskEdit2.EditText)'') and
(Trim(MaskEdit3.EditText)'*') and (Trim(MaskEdit4.EditText)','))
then
begin
DM1.IBSP_Dob_Delanki.ParamByName('N_Delanka').AsInteger:=
StrToInt(Trim(MaskEdit2.EditText));
DM1.IBSP_Dob_Delanki.ParamByName('Kvadrat').AsString:=
Trim(MaskEdit3.EditText);
DM1.IBSP_Dob_Delanki.ParamByName('Plotschad').AsFloat:=
StrToFloat(Trim(MaskEdit4.EditText));
DM1.IBSP_Dob_Delanki.Prepare;
DM1.IBSP_Dob_Delanki.ExecProc;
DM1.IBSP_Dob_Str_Bilet.ParamByName('NLesobilet').AsInteger:=
StrToInt(Trim(MaskEdit1.EditText));
DM1.IBSP_Dob_Str_Bilet.ParamByName('NDelanka').AsInteger:=
StrToInt(Trim(MaskEdit2.EditText));
DM1.IBSP_Dob_Str_Bilet.Prepare;
DM1.IBSP_Dob_Str_Bilet.ExecProc;
for i:=1 to ValueListEditor1.RowCount-1 do
begin
if(ValueListEditor1.Values[ValueListEditor1.Keys[i]]'') then
begin
if(StrToFloat(ValueListEditor1.Values[ValueListEditor1.Keys[i]])>0)
then
begin
DM1.IBSP_Dob_Nal_Drevesini.ParamByName('Kolvo').AsFloat:=
StrToFloat(ValueListEditor1.Values[ValueListEditor1.Keys[i]]);
DM1.IBSP_Dob_Nal_Drevesini.ParamByName('Poroda').AsString:=
ValueListEditor1.Keys[i];
DM1.IBSP_Dob_Nal_Drevesini.ParamByName('Nomer').AsInteger:=
StrToInt(Trim(MaskEdit2.EditText));
DM1.IBSP_Dob_Nal_Drevesini.Prepare;
DM1.IBSP_Dob_Nal_Drevesini.ExecProc;
end
end
else
j:=j+1;
end
end;
if((Ok) and (j
DM1.IBTrans_Write.Commit;
except
on E: Exception do
begin
if(Pos('Лесобилет с таким номером уже существует !!!',E.Message)0) then
ShowMessage(' Лесобилет с таким номером уже существует !')
else if(Pos(‘Делянка с таким номером уже существует !!!',E.Message)0) then
ShowMessage(' Делянка с таким номером уже существует !')
else
ShowMessage('ОшибкаБД!');
DM1.IBTrans_Write.Rollback;
end;
end
end;
/>


Не сдавайте скачаную работу преподавателю!
Данный реферат Вы можете использовать для подготовки курсовых проектов.

Поделись с друзьями, за репост + 100 мильонов к студенческой карме :

Пишем реферат самостоятельно:
! Как писать рефераты
Практические рекомендации по написанию студенческих рефератов.
! План реферата Краткий список разделов, отражающий структура и порядок работы над будующим рефератом.
! Введение реферата Вводная часть работы, в которой отражается цель и обозначается список задач.
! Заключение реферата В заключении подводятся итоги, описывается была ли достигнута поставленная цель, каковы результаты.
! Оформление рефератов Методические рекомендации по грамотному оформлению работы по ГОСТ.

Читайте также:
Виды рефератов Какими бывают рефераты по своему назначению и структуре.

Сейчас смотрят :

Реферат Статистический анализ коммерческой деятельности
Реферат Статистические гипотезы
Реферат Статистика экономической деятельности предприятия
Реферат Социально-экономические последствия инфляции и антиинфляционная политика
Реферат Работа командира роты при выполнении технического обслуживания тан
Реферат Статистичні спостереження
Реферат Drew Barrymore Essay Research Paper Drew Barrymore
Реферат Статистика транспорта
Реферат Стратегия социально-экономического развития города Ханты-Мансийска до 2020 года
Реферат Статистическое наблюдение: понятие, виды и методы
Реферат Статистика макроэкономических показателей
Реферат Структурные кризисы, их сущность и последствия
Реферат Статистический анализ безработицы в Российской Федерации
Реферат Некоторые новые данные анализа сил и потерь на советско-германском фронте
Реферат Франция и её особенности