Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Создание БД в Delphi_30_01_12.doc
Скачиваний:
15
Добавлен:
21.08.2019
Размер:
619.01 Кб
Скачать

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

ЗАДАНИЯ

  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].