Занятие 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].