Занятие 1. Разработка физической модели базы данных.
Реляционные базы данных
СОЗДАНИЕ КЛИЕНТСКИХ ПРОГРАММ БАЗ ДАННЫХ В СРЕДЕ DELPHI
Методические указания
к лабораторным работам
для специальности ИУСиТ
2 издание
Одесса – 2012
Учебное пособие разработано старшими преподавателями кафедры «Техническая кибернетика» Одесского национального морского университета Кутяковым Дмитрием Владимировичем и Рублевым Ильей Сергеевичем на основании программы курса «Организация баз данных и знаний» для специальности 6.080400 «Информационные управляющие системы и технологии».
Пособие посвящено разделу курса «Создание клиентских программ баз данных».
Учебное пособие одобрено кафедрой «Техническая кибернетика» ОНМУ «__» августа 20__ г. (протокол № _)
ОГЛАВЛЕНИЕ
ВВЕДЕНИЕ.............................................................................................. 2
Занятие 1. Разработка физической модели базы данных................. 4
Занятие 2. Создание базы данных в программе FlameRobin......... 7
Занятие 3. Разработка форм «Товар» и «Покупатели»................ 10
Занятие 4. Разработка главной формы программы..................... 19
Приложение 1. Дополнительные данные для ввода в БД:........... 22
ВВЕДЕНИЕ
В методических указаниях к лабораторным работам рассмотрены средства Delphi создания клиентских программ, предназначенных для работы с базами данных.
В ходе выполнения работ рассматриваются вопросы создания базы данных для клиент-серверной СУБД Firebird, использование компонент BDE Delphi для связи программы с СУБД, а также приведен пример разработки клиентского приложения.
Исходными данными, используемыми в примере, являются данные о наличии товаров на складе и покупателях товара. Это:
1. Выходная форма «Накладная отпуска товара»:
Накладная № 1 Отпуск товаров | ||||
Дата | Покупатель: | Адрес | ||
10.02.2002 | ООО "Геракл" | Г. Одесса, ул. Терешковой, 25, тел. 68-77-86 | ||
Отпущен товар | Количество | Ед измерения | Цена | Стоимость, грн |
Тушенка | Банка, 500г. | 4,78 | ||
Сахар | Кг | 3,15 | ||
Макароны | Кг | 1,40 | ||
Пепси-кола | Банка, 0,5л | 1,67 | ||
Печенье | Кг | 5,15 | ||
Итого | 1891 грн |
2. Таблица товаров, имеющихся на складе:
Наименование товара | кол. | ед. измер. | цена | Товарная группа |
Тушенка | Банка, 500г. | 4,78 | консервы | |
Сахар | Кг | 3,15 | бакалея | |
Макароны | Кг | 1,40 | бакалея | |
Пепси-кола | Банка, 0,5л | 1,67 | напитки | |
Печенье | Кг | 5,15 | кондизделия | |
Сардины в масле | Банки, 400г. | 3,78 | консервы | |
Крупа гречневая | Кг | 3,25 | бакалея | |
Крупа рисовая | Кг | 3,42 | бакалея | |
Красный мак | Кг | 8,75 | конфеты | |
Вода Куяльник | Бутылки, 0,5л | 1,80 | напитки | |
Пепси-кола | Бутылка, 0,5л | 1,75 | напитки |
3. Таблица покупателей, имеющих кредит на складе (на 10.02.02):
Покупатель: | Адрес | тел. | кредит, грн. |
ООО "Геракл" | Г. Одесса, ул. Терешковой, 25 | 68-77-86 | |
ООО "Алла" | Г. Одесса, ул. Пушкинская,35. | 23-71-63 | |
ЧП "Никита" | Г. Южный, ул. Средняя, 45 | 46-87-883 |
Перед выполнением лабораторных работ разработайте ER – модель задачи. Это поможет Вам уяснить структуру создаваемой базы данных. При выполнении цикла из шести лабораторных работ Вам необходимо сделать:
1. Используя теорию нормализации отношений разработать физическую модель базы данных "Выдача товаров со склада" для СУБД Firebird.
2. Создать соответствующие таблицы БД «Torgovl» в СУБД Firebird.
3. Создать программу - клиент в Delphi для работы с БД «Torgovl», которая отвечает следующим требованиям:
Программа должна состоять из следующих форм:
1. «Товары» - для работы с таблицей товаров. Форма должна обеспечивать: добавление, корректировку и удаление данных о товарах. Необходимо предусмотреть возможность:
a) фильтрации записей по товарной группе;
b) сортировки по названию товара (как по возрастанию, так и по убыванию);
c) по каждому товару показывать его количество на складе и стоимость.
2. «Клиенты» -для работы с клиентами. Предусмотреть операции:
a) добавления, корректировки и удаления данных о клиентах;
b) обеспечить возможность сортировки и поиска клиента по названию фирмы;
c) записи о клиентах, имеющих кредит менее 1000 грн. выделять красным цветом.
3. «Главная» - для выписки накладных. Необходимо обеспечить:
a) добавление, корректировку и удаление данных о накладных и выдаваемых по ним товаров;
b) товар может быть включен в накладную только в том случае, если он есть на складе в нужном количестве;
c) при завершении выписки накладной для соответствующих товаров уменьшается их количество на складе;
d) накладная может быть выписана на сумму, не превышающую суммы кредита+100 грн.;
e) при выписке накладной сумма кредита клиента уменьшается на сумму товара, отпущенного по накладной.
Для реализации проекта мы могли бы использовать компоненты ADO, IBX (Interbase Express) и dbExpress, существующие в Delphi. Подробнее об этих компонентах рассказано в [3], часть III.
В этом методическом указании мы познакомимся с компонентами ZeosDBO, разработанными ZeosLib Development Group, сайт проекта http://zeos.firmos.at, а загрузить - сайта http://www.sourceforge.net/projects/zeoslib
Занятие 1. Разработка физической модели базы данных.
Начнем анализ с Накладной.
Накладная № 123 | ||||
Дата | Покупатель: | Адрес | ||
10.02.2002 | ТОО "Геракл" | Г. Одесса, ул. Терешковой, 25, тел. 68-77-86 | ||
Отпущен товар | количество | ед. измерения | цена | стоимость |
Тушенка | банок | 4,78 | 478 грн | |
Сахар | кг | 3,15 | 630 грн | |
Макароны | кг | 1,40 | 140 грн | |
Пепси-кола | банка | 1,67 | 334 грн | |
Печенье | кг | 5,15 | 309 грн | |
Итого | 1891 грн |
Представим атрибуты сущности «Отпуск-товара» в виде таблицы 1:
Таблица 1.
Отпуск-товара-со-склада |
Накладная № |
Дата |
Покупатель |
Город |
Адрес |
Тел |
Товар |
Ед измерения |
Цена за ед |
Отпущено-ед |
Стоимость |
- Выпишем функциональные зависимости
Накладная № → Дата, Покупатель.
Покупатель → Город, Адрес, Тел
(Город, Адрес) → Тел
(Товар, Ед измерения) → Цена за ед (так как встречается один и тот же товар в различной упаковке)
(Накладная №, Товар) → Отпущено-ед
(Отпущено-ед, Цена за ед) → Стоимость
- Выберем потенциальные ключи. Возможны варианты:
(Накладная №, Товар, Ед измерения)
(Дата., Покупатель, Товар)
В качестве первичного ключа мы примем вариант (Накладная №, Товар, ед. измерения). Он позволяет, если нужно, несколько раз в день отпускать товар одному и тому же покупателю.
На основании выявленных функциональных зависимостей, переделаем таблицу 1. Выделим первичный ключ, а также объединим те атрибуты, которые входят в функциональные зависимости. Результат представлен в таблице 2.
Таблица 2.
Отпуск-товара-со-склада | |
Накладная № | (PK) |
Товар | |
Ед измерения | |
Дата | Вместе определяют накладную № |
Покупатель | |
Город | ФЗ от Покупатель |
Адрес | |
Тел | |
Цена за ед | ФЗ от Товар и Единицы |
Отпущено-ед | независима |
Стоимость | Равна (Цена * Отп уд) |
Данное отношение не находится во 2 НФ, поскольку неключевые атрибуты находятся в функциональных зависимостях от части атрибутов первичного ключа (PK).
Для приведения таблицы 2 к второй нормальной форме (2 НФ), выделим частично зависимые атрибуты и их детерминанты в отдельные отношения:
Таблица 3
Отпуск-товара-по накладной | Накладная для покупателя | |||
Накладная № (FK) | (PK) | Накладная № | (PK) | |
Товар (FK) | Дата | ( AK) | ||
Ед измерения (FK) | Покупатель (FK) | |||
Отпущено-ед | независима | |||
Стоимость | Равна (Цена * Отп ед) |
Товары | Покупатели | |||
Товар | (PK) | Покупатель | (PK) | |
Ед измерения | Город | ( FK ) | ||
Цена за ед | Тел. | |||
Адрес |
Одна и та же фирма может иметь несколько телефонов. Поэтому для перехода сущности к третьей нормальной форме (3 НФ), вынесем телефон и адрес покупателя в отдельную таблицу:
Таблица 4
Телефон покупателя | |
Город | (PK) |
Тел. | |
Адрес |
Таблица Товары должна быть дополнена атрибутом «Товарная группа», а таблица Покупатель – атрибутом «Сумма кредита». Окончательно физическая модель задачи, удовлетворяющая третьей нормальной форме, такова:
Таблица 5
Товар | Тел покупателя | Покупатель | |||
Товар ( PK) | Город | (PK) | Покупатель (PK) | ||
Ед измерения (РК) | Тел | Сумма кредита | |||
Цена за ед | Адрес | ||||
Товарная группа | Покупатель (FK) |
Отпуск-товара-со-склада | Накладная | ||
Накладная ( FK) | (PK) | Накладная ( PK) | |
Товар ( FK) | |||
Отпущено-ед | Дата | ||
Стоимость = Отпущено-ед * Цена за ед | Покупатель ( FK ) |
ЗАДАНИЯ
1. На основании данных, приведенных в таблице 5 разработайте в программе ERStudio логическую, физическую модели базы данных и сгенерируйте скрипт с операторами DDL.
Проект логической модели базы данных в ERStudio должен выглядеть таким образом ( рис. 1) :
Рисунок 1. Инфологическая модель базы данных Торговля
Операторы DDL создания таблиц базы данных приведены ниже:
/* TABLE: Nakl */
CREATE TABLE Nakl( NaklNom INTEGER NOT NULL, IdPokup INTEGER NOT NULL,
NaklDate DATE NOT NULL, CONSTRAINT NaklPK PRIMARY KEY (NaklNom));
/* TABLE: Otpusk */
CREATE TABLE Otpusk( IdTov INTEGER NOT NULL, NaklNom INTEGER NOT NULL,
Kvo INTEGER DEFAULT 1 NOT NULL, CONSTRAINT OtpuskPK PRIMARY KEY (IdTov,NaklNom));
/* TABLE: Pokup */
CREATE TABLE Pokup( IdPokup INTEGER NOT NULL, PokupName VARCHAR(30),
Kredit FLOAT DEFAULT 0 NOT NULL, City VARCHAR(20) NOT NULL,
TelNom CHAR(12) NOT NULL, CONSTRAINT PokupPK PRIMARY KEY (IdPokup));
/* TABLE: Tel */
CREATE TABLE Tel( City VARCHAR(20) NOT NULL, TelNom CHAR(12) NOT NULL,
Address VARCHAR(50) NOT NULL, CONSTRAINT TelPK PRIMARY KEY (City,TelNom));
/* TABLE: Tovar */
CREATE TABLE Tovar( IdTov INTEGER NOT NULL, TovName VARCHAR(40) NOT NULL,
EdIzm VARCHAR(14) NOT NULL, Cena FLOAT NOT NULL, TovGroup VARCHAR(30),
CONSTRAINT TovarPK PRIMARY KEY (IdTov));
/* TABLE: Nakl */
ALTER TABLE Nakl ADD CONSTRAINT NaklPokFK FOREIGN KEY(IdPokup) REFERENCES Pokup(IdPokup);
/* TABLE: Otpusk */
ALTER TABLE Otpusk ADD CONSTRAINT OtpTovarFK FOREIGN KEY(IdTov) REFERENCES Tovar(IdTov);
ALTER TABLE Otpusk ADD CONSTRAINT OtpNaklFK FOREIGN KEY(NaklNom) REFERENCES Nakl(NaklNom);
/* TABLE: Pokup */
ALTER TABLE Pokup ADD CONSTRAINT PokTelFK FOREIGN KEY(City,TelNom) REFERENCES Tel(City,TelNom);
Подробнее о создании физических моделей баз данных в ERStudio рассказано в [1].