- •Реляционные базы данных создание клиентских программ баз данных в среде delphi
- •2 Издание
- •Оглавление
- •2 Издание 0
- •Введение
- •Занятие 1. Разработка физической модели базы данных.
- •(Товар, Ед измерения) → Цена за ед (так как встречается один и тот же товар в различной упаковке)
- •Занятие 2. Создание базы данных в программе FlameRobin.
- •Занятие 3. Разработка форм «Товар» и «Покупатели».
- •Занятие 4. Разработка главной формы программы
- •Приложение 1. Дополнительные данные для ввода в бд:
Занятие 1. Разработка физической модели базы данных.
Начнем анализ с Накладной.
Накладная № 123 |
||||
Дата |
Покупатель: |
Адрес |
||
10.02.2002 |
ТОО "Геракл" |
Г. Одесса, ул. Терешковой, 25, тел. 68-77-86 |
||
Отпущен товар |
количество |
ед. измерения |
цена |
стоимость |
Тушенка |
100 |
банок |
4,78 |
478 грн |
Сахар |
200 |
кг |
3,15 |
630 грн |
Макароны |
100 |
кг |
1,40 |
140 грн |
Пепси-кола |
200 |
банка |
1,67 |
334 грн |
Печенье |
60 |
кг |
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 )
ЗАДАНИЯ
На основании данных, приведенных в таблице 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].
