Методология проектирования баз данных
Последовательность проектирования базы данных для предприятия, занимающегося заготовкой древесины, её переработкой и сбытом готовой продукции: скрипты создания таблиц по типам связей и вторичных индексов, создание первичного и внешнего ключей, листинга.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 02.06.2009 |
Размер файла | 743,7 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
51
Московский Государственный Технический Университет Им. Н.Э. Баумана
Калужский филиал
Кафедра САУ и электротехники
Методология проектирования баз данных
Расчётно-пояснительная записка к курсовой работе
по курсу «Проектирование алгоритмов и
программного обеспечения»
Выполнил: студент группы САУ-81
Лебедев А.Л.
Руководитель: доцент, к. т. н.
Николаенко С. И.
- Калуга
- 2005 г.
- I. Проект базы данных для предприятия, занимающегося заготовкой древесины, её переработкой и сбытом готовой продукции
- Деревообрабатывающее предприятие осуществляет заготовку, переработку и сбыт древесины. На предприятии осуществляется бригадный принцип организации труда. Бригада может иметь следующую специализацию: заготовительная, цеховая или погрузочная. Во главе бригад стоят бригадиры. Каждая бригада имеет свой табельный номер.
- Заготовка древесины заключается в следующем. Лесничество выделяет предприятию лесобилеты, в которых указано, где находятся делянки и сколько леса может быть заготовлено на каждом участке. Также указывается порода древесины. На предприятии существует определённое лицо - заведующий делянками, - который выписывает у лесничества лесобилеты, выдаёт делянки бригадам, принимает делянки от бригад, сдаёт участки назад лесничеству. Назначенная на данную делянку бригада выпиливает лес и привозит его на базу предприятия.
- Привезённый на базу лес сдаётся начальнику базы, который фиксирует кубатуру кругляка.
- На территории предприятия находится несколько цехов по переработке древесины, за каждым цехом закреплена сушильная камера; также имеется склад готовой продукции. Цеха пронумерованы. В каждом цехе работает бригада, (в цехе их может быть несколько), которая осуществляет распиловку древесины и её сдачу на склад продукции. Бригадир получает лес от начальника базы. Приём готовой продукции ведёт кладовщик.
- На предприятии определено также лицо, которое занимается продажей товара - начальник сбыта. Он договаривается с фирмами-клиентами об объёмах и датах поставок, видах продукции и, соответственно, определяет задание цеховым бригадам.
- Работники и фирмы-клиенты могут иметь телефон. Их может быть несколько.
- При работе с электронными документами должна быть доступна следующая информация:
- 1. штат сотрудников предприятия (таб. №, ФИО, дом. адрес, телефон, дата приёма на работу и назначения на должность, должность, номер бригады);
- 2. когда и сколько лесобилетов выписано лесничеством предприятию. В лесобилетах указывается расположение делянок, площадь, порода древесины;
- 3. какая бригада работает на делянке;
- 4. сколько леса бригада привезла на базу. Сколько всего леса и какого хранится на базе;
- 5. какую продукцию и по какой цене производит предприятие;
- 6. какой план, когда и на какой срок выдан начальником сбыта цеховым бригадам;
- 7. сколько леса выписал начальник бригады на базе и сдал продукции на склад. Сколько и какой продукции хранится на складе;
- 8. с какими фирмами-клиентами сотрудничает предприятие (название фирмы, адрес и телефон);
- 9. какой заказ и на какой срок сделан предприятию фирмой-клиентом (вид, количество продукции и по какой цене);
- 10. какой товар, сколько, по какой цене и когда отгружен фирме-клиенту.
- Типовые операции (транзакции)
- · приём на работу, приписывание к бригадам, назначение на должность, увольнение, снятие с должности работников, перевод в другую бригаду;
- · создание новых и расформирование старых бригад;
- · выписывание лесобилетов у лесничества;
- · выдача делянок бригадам;
- · приём делянок у бригад;
- · возвращение делянок лесничеству;
- · привоз леса бригадой на базу;
- · выдача плана цеховым бригадам;
- · получение леса бригадирами на базе;
- · сдача продукции на склад;
- · добавление и удаление фирм-клиентов;
- · получение заказа от фирмы-клиента;
- · продажа продукции.
- Общий вид накладных и других документов
- Лесобилет №_____
- Лесничество «____________» Предприятие «____________»
- Заведующий делянками ____________
- «____»___________200 г.
- Накладная на возврат делянки №___ лесничеству «____________» №___ от ______
- Заведующий делянками ___________
- Накладная на заказ товара №___ от ____
- Фирма-заказчик __________Начальник сбыта __________
- Адрес фирмы __________
- Телефон __________
- Срок выполнения заказа_____
- Всего на сумму _______
- Накладная на продажу аналогична накладной на заказ, с той лишь разницей, что в ней указывается зав. складом и ставится не срок выполнения заказа, а дата продажи.
- Подготовка отчёт о штате сотрудников по форме:
- Подготовка отчёта о наличии товара на складе по форме:
- Кладовщик ______________
- Всего на сумму __________
- Подготовка отчёта об ассортименте товара по форме:
- Подготовка отчёта о поставках товара фирмам-клиентам по форме:
- Название фирмы «_____________»
- Адрес
- Телефон Срок поставок с___ по ___
- Всего на сумму: _________
- Подготовка плана работы цеховым бригадам по форме:
- План работы № __
- Бригада №___Начальник сбыта ____________
- Бригадир ___________Дата ____ Срок выполнения, дней ____
- II Концептуальное проектирование
- 1. Типы сущности
- Выделим следующие типы сущностей:
- 1. древесина;
- 2. лесобилет;
- 3. делянка;
- 4. работник;
- 5. бригада;
- 6. бригадир;
- 7. зав. делянками;
- 8. нач. базы;
- 9. продукция (товар);
- 10. зав. складом
- 11. нач. сбыта;
- 12. фирма-клиент;
- 13. телефон;
- 14. накладная на возврат делянки лесничеству;
- 15. накладная на заказ товара;
- 16. накладная на продажу товара;
- 17. план работы цеховой бригады;
- Типы сущностей
- лес, сырьё
- 2. Типы связей
- Определим типы связей:
- 1. работник приписан к бригаде;
- 2. бригаду возглавляет бригадир;
- 3. зав. делянками выписывает лесобилет;
- 4. лесобилет содержит делянку;
- 5. древесина указана для делянки;
- 6. зав. делянки оформляет накладную на возврат делянки лесничеству;
- 7. накладная на возврат делянки лесничеству содержит делянку;
- 8. делянка закреплена за бригадиром;
- 9. древесина имеется у бригадира;
- 10. лес хранится у начальника базы;
- 11. начальник сбыта оформляет накладную на заказ;
- 12. фирма-клиент выписывает накладную на заказ;
- 13. продукция входит в накладную на заказ;
- 14. начальник сбыта выдаёт план работы;
- 15. бригадир получает план работы;
- 16. продукция входит в план работы;
- 17. бригадир сдаёт продукцию;
- 18. продукция хранится у зав. складом;
- 19. зав. складом оформляет накладную на продажу;
- 20. фирма-клиент выписывает накладную на продажу;
- 21. продукция входит в накладную на продажу;
- 22. фирма-клиент имеет телефон;
- 23. работник имеет телефон.
- Типы связей
- 3. Атрибуты
- Тип сущности/
- срок
- целый
- -
- нет
- -
Делянка № |
Квадрат |
Площадь, |
Порода древесины |
Кол-во, куб. м. |
|
1 |
13,36 |
6000 |
сосна |
50 |
|
ель |
120 |
||||
берёза |
35 |
||||
2 |
Т.д. |
номер делянки |
Квадрат |
Площадь, |
|
1 |
13,36 |
6000 |
Наименование |
Ед. измерения |
Цена |
Кол-во |
Стоимость |
|
Товар1 |
пог. м. |
Таб. № |
ФИО |
Адрес |
Телефон |
Дата приёма на работу |
Таб. № бригады |
Должность |
Дата назначения на должность |
|
Наименование |
Ед. измерения |
Цена |
Кол-во |
Стоимость |
|
Наименование |
Ед. измерения |
Цена |
Наименование |
Ед. измерения |
Цена |
Кол-во |
Стоимость |
|
Наименование |
Ед. измерения |
Кол-во |
Наименование |
Краткое описание |
Синонимы |
Особенности |
|
древесина |
сырьё для продукции |
|
||
лесобилет |
документ, который выдаётся лесничеством |
нумерация лесобилетов ведётся в рамках текущего года |
||
делянка |
место в лесополосе, где предприятию разрешено выпиливание леса |
участок |
делянки могут возвращаться лесничеству по одной по мере выпиливания в них леса |
|
работник |
общее наименование для всех работающих на предприятии |
каждый работник входит в состав какой-либо бригады, кроме нач. базы, зав. складом, зав. делянками и нач. сбыта |
||
бригада |
основное рабочее звено предприятия |
каждая бригада выполняет только определённые виды работ |
||
бригадир |
работник, возглавляющий бригаду |
начальник |
в каждой бригаде обязательно есть бригадир |
|
зав. делянками |
работник, занимающийся выпиской лесобилетов у лесничества и возвратом участков, а также следящий за использованием делянок бригадами |
эту должность занимает только один работник |
||
нач. базы |
работник, который принимает лес и выдаёт лес цеховым бригадам |
--//-- |
||
зав. складом |
работник, который принимает готовую продукцию у цеховых бригад и выдаёт её фирмам- клиентам |
кладовщик |
--//-- |
|
нач. сбыта |
работник, который непосредственно сотрудничает с фирмами-клиентами и определяет план работы цеховым бригадам |
--//-- |
||
продукция |
совокупность изделий, которые выпускает предприятие |
товар |
вся продукция хранится на одном складе, может иметь одинаковое наименование, но разную цену |
|
фирма-клиент |
фирмы, которые осуществляют заказ и покупку продукции |
фирма-покупатель, фирма-заказчик |
делает заказ на продукцию, однако если таковая имеется на складе, может приобрести её сразу |
|
телефон |
средство сообщения между лесничеством, фирмами-клиентами и руководящими работниками, а также работников между собой |
фирмы-клиенты и работники могут иметь несколько номеров телефонов |
||
накладная на возврат делянки лесничеству |
документ, который свидетельствует, что лесничество приняло делянку у предприятия (зав. делянками) |
нумерация накладных ведётся в рамках года |
||
накладная на заказ товара |
документ, в котором фирма-клиент указывает какую продукцию она хочет приобрести и в какой срок |
бланк заказа |
--//-- |
|
накладная на продажу товара |
документ, который выписывает у зав. складом фирма-клиент, где указывается, какую продукцию она хочет приобретает и когда срок |
нумерация накладных ведётся в рамках года |
||
план работы цеховой бригады |
график работы бригады |
график работы |
выдаётся цеховым бригадам |
Тип сущности |
Тип связи |
Тип сущности |
Кардинальность |
Степень участия |
|
древесина |
указана для |
делянка |
M:N |
Т:Т |
|
зав. делянками |
выписывает |
лесобилет |
1:М |
Т:Т |
|
делянка |
входит в |
лесобилет |
M:1 |
Т:Т |
|
зав. делянками |
оформляет |
накладная на возврат делянки лесничеству |
1:М |
Т:Т |
|
делянка |
входит в |
накладная на возврат делянки лесничеству |
M:1 |
Т:Т |
|
делянка |
закреплена за |
бригадир |
1:1 |
Т:Р |
|
работник |
приписан к |
бригада |
М:1 |
T:Т |
|
бригадир |
возглавляет |
бригада |
1:1 |
Т:Т |
|
древесина |
имеется у |
бригадир |
М:N |
Т:Р |
|
древесина |
хранится у |
нач. базы |
М:1 |
P:Т |
|
бригадир |
сдаёт |
продукция |
M:N |
Р:Т |
|
продукция |
хранится у |
зав. складом |
М:1 |
P:Т |
|
фирма-клиент |
выписывает |
накладная на заказ |
1:М |
Т:Т |
|
нач. сбыта |
оформляет |
накладная на заказ |
1:М |
Т:Т |
|
продукция |
входит в |
накладная на заказ |
1:М |
Т:Т |
|
фирма-клиент |
выписывает |
накладная на продажу |
1:М |
Т:Т |
|
зав. складом |
оформляет |
накладная на продажу |
1:М |
Т:Т |
|
продукция |
входит в |
накладная на продажу |
1:М |
Т:Т |
|
нач. сбыта |
выдаёт |
план работы |
1:М |
Т:Т |
|
бригада |
получает |
план работы |
1:М |
Р:Т |
|
продукция |
входит в |
план работы |
1:М |
Т:Т |
|
работник |
имеет |
телефон |
М:1 |
P:Т |
|
фирма-клиент |
имеет |
телефон |
М:1 |
P:Т |
связи |
Атрибут |
Описание |
Тип данных |
Значение по умолчанию |
Допустимость Null |
Производный, множестве-нный |
|
древесина |
порода |
порода деревьев |
символьный |
- |
нет |
множ |
|
Лесо-билет |
номер |
целый |
- |
нет |
- |
||
дата |
дата выписки |
дата |
- |
нет |
- |
||
делянка |
номер |
целый |
- |
нет |
- |
||
квадрат |
Местопол-ожение |
символьный |
- |
нет |
- |
||
площадь |
плав-щий |
- |
нет |
- |
|||
работник |
таб. номер |
целый |
- |
нет |
- |
||
ФИО |
фамилия, имя, отчество |
символьный |
- |
нет |
- |
||
адрес |
адрес места жительства |
символьный |
- |
нет |
- |
||
телефон |
символьный |
- |
да |
множ |
|||
дата поступления |
дата приёма на работу |
дата |
- |
нет |
- |
||
зав. делянками |
те же, что у работника + |
||||||
дата назначения |
дата назначения на должность |
дата |
- |
нет |
- |
||
нач. базы |
те же, что у зав. делянками |
||||||
зав. складом |
те же, что у зав. делянками |
||||||
нач. сбыта |
те же, что у зав. делянками |
||||||
бригада |
таб. номер |
целый |
- |
нет |
- |
||
специализация |
место работы бригады |
символьный |
- |
нет |
- |
||
номер цеха |
цех, в котором работает бригада |
целый |
да |
- |
|||
бригадир |
те же, что у работника + |
||||||
дата назначения |
дата назначения на должность |
дата |
- |
нет |
- |
||
продукция |
наименование |
символьный |
- |
нет |
- |
||
цена |
плав-щий |
- |
нет |
- |
|||
ед. измер-я |
символьный |
- |
нет |
- |
|||
фирма-клиент |
наименование |
символьный |
- |
нет |
- |
||
адрес |
юридический адрес фирмы |
символьный |
- |
нет |
|||
телефон |
символьный |
- |
да |
множ |
|||
накладная на возврат делянки лесниче-ству |
номер |
целый |
- |
нет |
- |
||
дата |
дата выписки |
дата |
- |
нет |
- |
||
накладная на заказ товара |
номер |
целый |
- |
нет |
- |
||
дата |
даты выписки |
дата |
- |
нет |
- |
||
|
срок выполнения заказа |
|
|
|
|
||
Накладная на продажу |
номер |
целый |
- |
нет |
- |
||
дата |
дата выписки |
дата |
- |
нет |
- |
||
план работы цеховой бригады |
те же, что у накладной на заказ+ |
||||||
объём |
общий объём древесины, необходимый для выполнения плана |
плав-щий |
- |
нет |
- |
||
хранится у |
кол-во |
кол-во древесины у нач. базы, у зав. складом |
плав-щий |
- |
нет |
- |
|
сдаёт |
кол-во |
кол-во продукции, которую сдаёт бригадир зав. складом |
плав-щий |
- |
нет |
- |
|
имеется у |
кол-во |
кол-во древесины, которое имеется у бригадира |
плав-щий |
- |
нет |
- |
|
указана для |
кол-во |
кол-во древесины на делянке |
плав-щий |
- |
нет |
- |
4. Домены атрибутов
Домен |
Атрибуты |
Тип данных |
Ограничения |
Примеры значений |
|
порода |
порода |
символьный(20) |
берёза |
||
номер |
номер лесобилета, делянки, накладной на возврат делянки лесничеству, накладных на заказ и продажу товара, плана работы, цеха |
целый |
>0 |
1024 |
|
специализация |
специализация бригады |
символьный(20) |
заготовительная |
||
дата |
дата выдачи лесобилета, накладной на возврат делянки лесничеству, плана работы, дата оформления накладной на заказ и продажу, дата поступления на работу и назначения на должность |
дата |
>01.01.2000 и<01.01.2020 |
03.12.2002 |
|
срок |
срок выполнения плана работы или заказа |
целый |
>0 и <30 |
14 |
|
объём |
объём древесины в плане работы |
плавающий |
>0 |
35,5 |
|
квадрат |
квадрат |
символьный(5) |
10*15 |
||
площадь |
площадь |
плавающий |
>0 |
10000,5 |
|
таб. номер |
таб. номер работников, бригадиров, бригад, зав. делянками, нач. базы, зав. склада, нач. сбыта |
целый |
>0 |
1251 |
|
название |
ФИО, название фирмы-клиента, наименование товара |
символьный(40) |
Лебедев Алексей Леонидович |
||
цена |
цена |
плавающий |
>0 |
123,5 |
|
единицы измерения |
единицы измерения вида товара |
символьный(10) |
кв.м. |
||
адрес |
адрес работников, бригадиров, бригад, зав. делянками, нач. базы, зав. склада, нач. сбыта, фирм-клиентов |
символьный(50) |
г. Калуга ул. Новаторская д.12 кв.6 |
||
телефон |
телефон работников, бригадиров, бригад, зав. делянками, нач. базы, зав. склада, нач. сбыта, фирм-клиентов |
символьный(10) |
57-16-01 |
||
количество |
кол-во древесины у нач. базы, у зав. складом,кол-во продукции, которую сдаёт бригадир зав. складом,кол-во древесины, которое имеется у бригадираБкол-во древесины на делянке |
плавающий |
>0 |
125,3 |
5. Определение потенциальных ключей и выбор среди них первичных
Тип сущности |
Первичный ключ |
Альтернативные ключи |
|
древесина |
порода |
||
лесобилет |
номер |
||
делянка |
номер |
квадрат, площадь |
|
работникбригадирзав. делянкаминач. базызав. складомнач. сбыта |
таб. номер |
ФИО, адрес |
|
бригада |
номер |
||
продукция |
наименование, цена |
||
фирма-клиент |
название, адрес |
||
накладная на возврат делянки лесничеству, накладная на заказ и на продажу, план работы |
номер |
||
телефон |
номер |
6. Построение ER-модели
III Логическое проектирование
1. Приведение концептуальной модели в соответствие с требованиями реляционной модели данных
1.1 Удаление связей типа M:N и связей с атрибутами
Связи «Древесина имеется у Бригадир» и «Древесина хранится у Нач. базы» заменяем на тип сущности «Наличие» с наследуемыми атрибутами «Таб. номер» и «Порода» и с собственным атрибутом «Количество» и типы связей «Древесина имеется в Наличие», «Нач. базы имеет в Наличие», «Бригадир имеет в Наличие».
Связь «Древесина указана для Делянка» заменяем на тип сущности «Наличие древесины» с наследуемыми атрибутами «Порода» и «Номер» и собственным атрибутом «Количество» и типы связей «Древесина характеризует Наличие древесины» и «Наличие древесины указано для Делянка»
Связь «Продукция хранится у Зав. складом» заменяем на тип сущности «Хранение» с наследуемыми атрибутами «Наименование» и «Цена» и собственным атрибутом «Количество» и типы связей «Продукция имеется на Хранение» и «Зав. складом имеет на хранение»
Связи «Входит в», связывающие сущности «Продукция» и «Накладная на заказ», «Накладная на продажу» и «План работы» заменяем на типы сущности «Строка накладной на заказ», «Строка накладной на продажу» и «Строка плана работы», типы связей «Продукция входит в Строка накладной на заказ», «Продукция входит в Строка накладной на продажу», «Продукция входит в План работы»; «Накладная на заказ содержит Строка накладной на заказ», «Накладная на продажу содержит Строка накладной на продажу» и «План работы содержит Строка плана работы» соответственно. При этом типы сущности «Строка накладной на заказ», «Строка накладной на продажу» и «Строка плана работы» наследуют атрибуты «Номер», «Наименование», «Цена» и имеют собственный атрибут «Количество».
Связи «Лесобилет содержит Делянка» и «Накладная на возврат делянки лесничеству содержит Делянка» заменяем на два типа сущности «Строка лесобилета» и «Строка накладной на возврат делянки лесничеству» с наследуемыми атрибутами «Номер лесобилета», «Номер накладной» и «Номер делянки» и типы связей «Лесобилет содержит Строка лесобилета» и «Накладная на возврат делянки лесничеству содержит Строка накладной на возврат делянки лесничеству»; «Делянка входит в Строка лесобилета» и «Делянка входит в Строка накладной на возврат делянки лесничеству» соответственно.
Связь «Бригадир сдаёт Продукция» заменяем на тип сущности «Объём товара» с наследуемыми атрибутами «Таб. номер», «Наименование» и «Цена» и типы связей «Продукция входит в Объём товара» и «Бригадир выпускает Объём товара»
Скорректированная таблица «Типы сущностей»
Наименование |
Краткое описание |
Синонимы |
Особенности |
|
древесина |
сырьё для продукции |
лес, сырьё |
||
лесобилет |
документ, который выдаётся лесничеством |
нумерация лесобилетов ведётся в рамках текущего года |
||
делянка |
место в лесополосе, где предприятию разрешено выпиливание леса |
участок |
делянки могут возвращаться лесничеству по одной по мере выпиливания в них леса |
|
работник |
общее наименование для всех работающих на предприятии |
каждый работник входит в состав какой-либо бригады, кроме нач. базы, зав. складом, зав. делянками и нач. сбыта |
||
бригада |
основное рабочее звено предприятия |
каждая бригада выполняет только определённые виды работ |
||
бригадир |
работник, возглавляющий бригаду |
начальник |
в каждой бригаде обязательно есть бригадир |
|
зав. делянками |
работник, занимающийся выпиской лесобилетов у лесничества и возвратом участков, а также следящий за использованием делянок бригадами |
эту должность занимает только один работник |
||
нач. базы |
работник, который принимает лес и выдаёт лес цеховым бригадам |
--//-- |
||
зав. складом |
работник, который принимает готовую продукцию у цеховых бригад и выдаёт её фирмам- клиентам |
кладовщик |
--//-- |
|
нач. сбыта |
работник, который непосредственно сотрудничает с фирмами-клиентами и определяет план работы цеховым бригадам |
--//-- |
||
продукция |
совокупность изделий, которые выпускает предприятие |
товар |
вся продукция хранится на одном складе, может иметь одинаковое наименование, но разную цену |
|
фирма-клиент |
фирмы, которые осуществляют заказ и покупку продукции |
фирма-покупатель, фирма-заказчик |
делает заказ на продукцию, однако если таковая имеется на складе, может приобрести её сразу |
|
телефон |
средство сообщения между лесничеством, фирмами-клиентами и руководящими работниками, а также работников между собой |
фирмы-клиенты и работники могут иметь несколько номеров телефонов |
||
накладная на возврат делянки лесничеству |
документ, который свидетельствует, что лесничество приняло делянку у предприятия (зав. делянками) |
нумерация накладных ведётся в рамках года |
||
накладная на заказ товара |
документ, в котором фирма-клиент указывает какую продукцию она хочет приобрести и в какой срок |
бланк заказа |
--//-- |
|
накладная на продажу товара |
документ, который выписывает у зав. складом фирма-клиент, где указывается, какую продукцию она хочет приобретает и когда срок |
нумерация накладных ведётся в рамках года |
||
план работы цеховой бригады |
график работы бригады на неделю |
график работы |
выдаётся цеховым бригадам |
|
наличие древесины |
порода древесины и её количество на делянке |
- |
- |
|
наличие |
количество древесины, имеющееся у бригадира и нач. базы |
- |
- |
|
объём товара |
количество и вид продукции, которое имеет в наличии бригадир |
|||
хранение |
количество продукции на хранении у зав. складом |
|||
строка лесобилета |
||||
строка накладной на возврат делянки лесничеству |
||||
строка плана работы |
||||
строка накладной на заказ |
||||
строка накладной на продажу |
Скорректированная таблица «Типы связей»
Тип сущности |
Тип связи |
Тип сущности |
Кардинальность |
Степень участия |
|
наличие древесины |
указано для |
делянка |
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:Т |
Ключи
Тип сущности |
Первичный ключ |
Альтернативные ключи |
|
древесина |
порода |
||
лесобилет |
номер |
||
делянка |
номер |
квадрат, площадь |
|
работникбригадирзав. делянкаминач. базызав. складомнач. сбыта |
таб. номер |
ФИО, адрес |
|
бригада |
таб. номер |
||
продукция |
наименование, цена |
||
фирма-клиент |
название, адрес |
||
накладная на возврат делянки лесничеству, накладная на заказ и на продажу, план работы |
номер |
||
телефон |
номер |
||
наличие |
слабая сущность |
||
хранение |
слабая сущность |
||
строка лесобилета |
слабая сущность |
||
строка накладной на возврат делянки лесничеству |
слабая сущность |
||
объём товара |
слабая сущность |
||
строка накладной на заказ |
слабая сущность |
||
строка накладной на продажу |
слабая сущность |
||
строка плана работы |
слабая сущность |
||
наличие древесины |
слабая сущность |
2. Построение скорректированной ER - модели
3. Определение наборов отношений
1. Фирма-клиент (название, адрес, номер телефона)
ПК: название, адрес
ВК: нет
1. Древесина (порода)
ПК: порода
ВК: нет
2. Делянка (номер, квадрат, площадь)
ПК: номер
ВК: нет
3. Работник (таб. номер, ФИО, адрес, телефон, дата поступления, дата назначения, должность, номер бригады)
ПК: таб. номер
ВК: номер бригады ссылается на бригада (номер)
4. Бригадир (таб. номер, ФИО, адрес, телефон, дата поступления, дата назначения, номер бригады)
ПК: таб. номер
ВК: номер бригады ссылается на бригада (номер)
5. Бригада (номер, специализация, номер цеха)
ПК: номер
ВК: нет
6. Продукция (наименование, цена, единицы измерения)
ПК: наименование, цена
ВК: нет
7. Телефон (номер, название фирмы-клиента, адрес фирмы-клиента, таб. номер работника)
ПК: номер
ВК: название фирмы-клиента, адрес фирмы-клиента ссылается на фирма-клиент (название, адрес)
ВК: таб. номер работника ссылается на работник (таб. номер)
8. Накладная на заказ (номер, дата, срок, таб. номер нач. сбыта, название фирмы-клиента, адрес фирмы-клиента, номер телефона фирмы-клиента)
ПК: номер
ВК: название фирмы-клиента, адрес фирмы-клиента ссылается на фирма-клиент (название, адрес)
ВК: таб. номер начальника сбыта ссылается на работник(таб. номер)
9. Строка накладной на заказ (кол-во, наименование продукции, цена продукции, номер накладной)
ПК: номер накладной, наименование продукции, цена продукции
ВК: номер накладной ссылается на накладная на заказ (номер)
ВК: наименование продукции, цена продукции ссылается на продукция (наименование, цена)
10. Накладная на продажу (номер, дата, таб. номер зав. складом, название фирмы-клиента, адрес фирмы-клиента, номер телефона фирмы-клиента)
ПК: номер
ВК: название фирмы-клиента, адрес фирмы-клиента ссылается на фирма-клиент(название, адрес)
ВК: таб. номер зав. складом ссылается на работник(таб. номер)
11. Строка накладной на продажу(кол-во, наименование продукции, цена продукции, номер накладной)
ПК: номер накладной, наименование продукции, цена продукции
ВК: номер накладной ссылается на накладная на продажу(номер)
ВК: наименование продукции, цена продукции ссылается на продукция(наименование, цена)
12. План работы(номер, дата, срок, объём древесины, таб. номер нач. сбыта, номер бригады)
ПК: номер
ВК: таб. номер начальника сбыта ссылается на работник(таб. номер)
ВК: номер бригады ссылается на бригада(номер)
13. Строка плана работы(кол-во, наименование продукции, цена продукции, номер плана)
ПК: номер плана, наименование продукции, цена продукции
ВК: номер плана ссылается на план работы(номер)
ВК: наименование продукции, цена продукции ссылается на продукция(наименование, цена)
14. Объём товара(кол-во, таб. номер бригадира, наименование продукции, цена продукции)
ПК: таб. номер бригадира, наименование продукции, цена продукции
ВК: таб. номер бригадира ссылается на работник(таб. номер)
ВК: наименование продукции, цена продукции ссылается на продукция(наименование, цена)
15. Наличие древесины(кол-во, порода, номер делянки)
ПК: номер делянки, порода
ВК: номер делянки ссылается на делянка(номер)
ВК: порода ссылается на древесина(порода)
16. Лесобилет(номер, таб. номер зав. делянками, дата)
ПК: номер
ВК: таб. номер зав. делянками ссылается на работник(таб. номер)
17. Строка лесобилета(номер лесобилета, номер делянки)
ПК: номер лесобилета, номер делянки
ВК: номер лесобилета ссылается на лесобилет(номер)
ВК: номер делянки ссылается на делянка(номер)
18. Накладная на возврат делянки лесничеству(номер, таб. номер зав. делянками, дата)
ПК: номер
ВК: таб. номер зав. делянками ссылается на работник(таб. номер)
19. Строка накладной на возврат делянки лесничеству(номер накладной, номер делянки)
ПК: номер накладной, номер делянки
ВК: номер накладной ссылается на накладная на возврат делянки лесничеству(номер)
ВК: номер делянки ссылается на делянка(номер)
20. Наличие(таб. номер бригадира, таб.номер нач. базы, порода, кол-во)
ПК: таб. бригадира, таб.номер нач. базы, порода
ВК: таб. номер бригадира ссылается на бригадир(таб. номер)
ВК: таб. номер нач. базы ссылается на работник(таб. номер)
ВК: порода ссылается на древесина(порода)
21. Хранение(таб. номер зав. складом, наименование продукции, цена продукции, кол-во)
ПК: наименование продукции, цена продукции
ВК: таб. номер зав. складом ссылается на работник(таб. номер)
ВК: наименование продукции, цена продукции ссылается на продукция(наименование, цена)
4. Проверка набора отношений на соответствие требованиям нормализации
Для каждого из отношений выпишем функциональные зависимости.
1. Фирма-клиент
название, адрес - номер телефона
2. Древесина
порода -
3. Делянка
номер - квадрат
номер - площадь
4. Работник
таб. номер - ФИО
таб. номер - адрес
таб. номер - телефон
таб. номер - дата поступления
таб. номер - дата назначения
таб. номер - должность
таб. номер - номер бригады
5. Бригадир
таб. номер - ФИО
таб. номер - адрес
таб. номер - телефон
таб. номер - дата поступления
таб. номер - дата назначения
таб. номер - номер бригады
6. Бригада
номер - специализация
номер - номер цеха
7. Продукция
наименование, цена - единицы измерения
8. Телефон
номер - название фирмы-клиента
номер - адрес фирмы-клиента
номер - таб. номер работника
9. Накладная на заказ
номер - дата
номер - срок
номер - таб. номер начальника сбыта
номер - название фирмы-клиента
номер - адрес фирмы-клиента
номер - телефон фирмы-клиента
10. Строка накладной на заказ
номер накладной, наименование продукции, цена продукции - количество
11. Накладная на продажу
номер - дата
номер - таб. номер зав. складом
номер - название фирмы-клиента
номер - адрес фирмы-клиента
номер - телефон фирмы-клиента
12. Строка накладной на продажу
номер накладной, наименование продукции, цена продукции - количество
13. План работы
номер - дата
номер - срок
номер - таб. номер нач. сбыта
номер - номер бригады
14. Строка плана работы
номер плана, наименование продукции, цена продукции - количество
номер плана, наименование продукции, цена продукции - объём древесины
15. Объём товара
таб. номер бригадира, наименование продукции, цена продукции - количество
16. Наличие древесины
номер делянки, порода - количество
17. Лесобилет
номер - таб. номер зав. делянками
номер - дата
18. Строка лесобилета
номер лесобилета, номер делянки -
19. Накладная на возврат делянки лесничеству
номер - таб. номер зав. делянками
номер - дата
20. Строка накладной на возврат делянки лесничеству
номер накладной, номер делянки
21. Наличие
таб. номер бригадира, таб. номер нач. базы, порода - количество
22. Хранение
таб. номер зав. складом, наименование продукции, цена продукции - количество
5. Проверка модели на возможность выполнения всех транзакций
Для каждой транзакции на ER-модели обозначим путь её выполнения.
6. Построение окончательного варианта ER - модели
ER-модель, изображённую в пункте 2 логического проектирования будет окончательным вариантом, т.к. пунктах 3 -5 ER - модель не претерпела никаких изменений.
7. Определение набора ограничений целостности
1 Обязательные данные. К ним относятся все атрибуты, составляющие первичные ключи + ещё некоторые атрибуты, которые по постановке задачи или из смысловых соображений не могут быть пустыми (см. таблицу «Атрибуты» и таблицу ниже).
Тип сущности/связи |
Атрибут |
Описание |
Тип данных |
|
строка накладной на заказ |
количество |
количество товара |
плавающий |
|
строка накладной на продажу |
количество |
количество товара |
плавающий |
|
строка плана работы |
количество |
количество товара |
плавающий |
|
хранение |
кол-во |
кол-во продукции у зав. складом |
плавающий |
|
наличие |
кол-во |
кол-во древесины у бригадира или нач. базы |
плавающий |
|
объём товара |
кол-во |
кол-во продукции, которое имеется у бригадира |
плавающий |
|
наличие древесины |
кол-во |
кол-во древесины на делянке |
плавающий |
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
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,
"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,
"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:=
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 (j<>0))
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<i)) then
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;
Подобные документы
Рассмотрение теоретических основ проектирования. Анализ предметной области и разработка таблиц базы данных. Заполнение таблиц, поиск данных с помощью фильтра. Создание форм, разработка запросов. Создание и настройка отчетов, составление приложения.
курсовая работа [2,8 M], добавлен 01.06.2014Создание таблиц базы данных с помощью MS Access "Страны Азии". Форма базы данных и запросы к выборкам данных. Модификация структуры таблиц, создания связей между главными таблицами, редактирование данных и проектирование форм для реальной базы данных.
контрольная работа [723,9 K], добавлен 25.11.2012Авторизация с каталогами проектирования базы данных магазина. Задачи базы данных: учет всех товаров, поиск и выдача данных о клиентах, адрес, телефоны, цена и наличие товара. Этапы проектирования базы данных. Схема данных, создание запросов и их формы.
реферат [1,6 M], добавлен 22.10.2009Этапы проектирования базы данных, определение целей и содержание таблиц. Добавление данных и создание других объектов базы данных. Даталогическая модель: структуризация, нормализация, схемы данных. Порядок, принципы создания пользовательского интерфейса.
курсовая работа [1,3 M], добавлен 26.03.2013База данных как компьютеризованная система, предназначенная для хранения информации и предоставления ее по требованию. Описание предметной области для проектирования и организации базы учета данных готовой продукции и сопровождения ее программой.
дипломная работа [1,0 M], добавлен 19.05.2011Создание базы данных и таблиц. Определение таблиц и информации, которую они будут содержать. Определение индексированных полей и организации связи между ними. Создание формы в окне базы данных. Создание отчета "Список улиц". Выбор внешнего вида макета.
контрольная работа [1,4 M], добавлен 11.04.2012Процесс проектирования базы данных, разработка её логической структуры в соответствии с инфологической моделью предметной области. Работа с программой СУБД Access, свойства таблиц и их полей, создание межтабличных связей; инфологическое проектирование.
курсовая работа [1,7 M], добавлен 17.12.2009Основные понятия и определение базы данных, этапы создания и проектирования, используемые модели. Создание базы данных "Страхование населения" для обработки данных о видах страховок, их стоимости, совершенных сделках, клиентах, сроках действия страховки.
реферат [860,5 K], добавлен 01.03.2011Особенности проектирования программы на языке С++ для обработки данных из таблиц базы данных. Основные функции программы, создание концептуальной модели базы данных и диаграммы классов, разработка интерфейса пользователя и запросов к базе данных.
курсовая работа [2,1 M], добавлен 08.06.2012Особенности разработки инфологической модели и создание структуры реляционной базы данных. Основы проектирования базы данных. Разработка таблиц, форм, запросов для вывода информации о соответствующей модели. Работа с базами данных и их объектами.
курсовая работа [981,4 K], добавлен 05.11.2011