Zak(KZak, Gr(KGr, GNaim, Kat(KKat, KNapr, KVes, KCena)), Pol(KPol, PNaim, PAdr), Trans(KTrans, TNaim, TGruz), ZSt, ZKol).
Выделим подчиненные отношения в самостоятельные, оставив в исходных реквизиты (атрибуты), соответствующие первичным ключам выделенных отношений:
Zak(KZak,KGr, KPol, KTrans, ZSt, ZKol);
Gr(KGr, GNaim, KKat);
Kat(KKat, KNapr, KVes, KCena);
Pol(KPol, PNaim, PAdr);
Trans(KTrans, TNaim, TGruz).
Среди выделенных нормализованных отношений нет одинаковых, различающихся лишь именами.
Результат нормализации:
Kat(KKat, KNapr, KVes, KCena);
Gr(KGr, GNaim, KKat);
Pol(KPol, PNaim, PAdr);
Trans(KTrans, TNaim, TGruz);
Zak(KZak, NaimIsp, RasSchet, KGr, KPol, KTrans, ZSt, ZKol).
БД находится в 3 нормальной форме, поскольку значения всех ее атрибутов атомарны, каждый не ключевой элемент функционально полно зависит только от первичного ключа и не зависят от других не ключевых атрибутов.
Рис. 6
Таблица Категория
Ключевое поле KKat
Kat(KKat, KNapr, KVes, KCena)
Рис. 7
Таблица Груз
Ключевое поле KGr
Gr(KGr, GNaim, KKat)
Рис. 8
Таблица Транспорт
Trans(KTrans, TNaim, TGruz)
Ключевое поле KTrans
Рис. 9
Таблица Получатель
Pol(KPol, PNaim, PAdr)
Ключевое поле KPol
Рис. 10
Таблица Заказ
Zak(KZak, KGr, KPol, KTrans, ZSt, ZKol)
Ключевое поле KZak
Рис.11
Запросы к реляционной базе данных
В процессе разработки БД «Грузопоток» были разработаны следующие регламентные запросы:
· Добавление Груза (добавление записи в таблицу Груз);
Запрос на добавление в таблицу Груз новых сведений:
INSERT INTO Gr ( KGr, GNaim, KKat )
SELECT [Введите код груза:] AS KGr, [Введите Наименование:] AS Naim, [Введите Код категории:] AS KKat
FROM Gr;
В таблице Заказы ключом поиска является Номер заказа, который уникален для каждого заказа. В таблице Получатель – ключ Код Получателя, в таблице Груз – Код Груза, в таблице Категория – Код категории, в таблице Транспорт - Код транспорта
· Добавление Получателя (добавление записи в таблицу Получатель);
· Добавление Категории (добавление записи в таблицу Категория);
· Добавление Транспорта (добавление записи в таблицу Транспорт);
· Добавление Заказа (добавление записи в таблицу Заказ)
Запрос на добавление Получателя, Транспорта, Категории и Заказа в таблицы, осуществляется аналогичным образом, что и добавление Груза
· Заказ-Груз (формирование общей таблицы, в которой отображаются все Заказы на каждый Груза);
Перекрестный запрос:
TRANSFORM Sum(Zak.St) AS [Sum-St]
SELECT Zak.[KZak]
FROM Gr INNER JOIN Zak ON Gr.[KGr]=Zak.[KGr]
GROUP BY Gr.GNaim, Gr.[KKat], Zak.[KZak]
ORDER BY Gr.[KGr]
PIVOT Gr.[KGr];
· Заказ-Получатель (формирование таблицы, в которой отображаются все Заказы каждого Получателя);
· Получатель-Груз (формирование таблицы, в которой отображаются все Грузы заказанные каждым Получателем);
· Груз-Получатель (формирование таблицы, в которой отображаются все Получатели, заказавшие каждый Груз);
Запросы на формирование таблиц Заказ - Получатель, Получатель - Груз, Груз – Получатель осуществляются аналогичным образом, что и перекрестный запрос Заказ-Груз.
· Поиск Заказа (осуществление поиска Заказа по его коду в таблице Заказ);
Запрос на выборку с параметром (поиск информации о договоре по номеру договора):
SELECT Zak.KZak, Zak.KPol, Zak.KGr, Zak.Kol, Zak.St, Zak.KTruns
FROM Zak
WHERE (((Zak.KZak)=[Введите номер Заказа:]));
Аналогично выполняются запросы на выборку для таблиц Получатель, Груз, Категория и Транспорт
· Поиск Груза (осуществление поиска груза по его коду в таблице Груз);
· Поиск Получателя (осуществление поиска Получателя по его коду в таблице Получатель);
· Поиск Категории (осуществление поиска категории по ее коду в таблице Категория);
· Поиск Транспорта (осуществление поиска транспорта по его коду в таблице Транспорт);
· Заказы (формирование таблицы Заказы с вычисляемым полем Стоимость);
SELECT Zak.[KZak], Zak.[KGr], Zak.[KPol], Zak.Kol, [Kol]*Kat.[KCena] AS St, Zak.[KTruns]
FROM Kat INNER JOIN (Gr INNER JOIN Zak ON Gr.[KGr] = Zak.[KGr]) ON Kat.[КKat] = Gr.[KKat];
· Сведения о Заказах (обновление таблицы Заказы);
UPDATE Kat INNER JOIN (Gr INNER JOIN Zak ON Gr.[KGr]=Zak.[KGr]) ON Kat.[KKat]=Gr.[KKat] SET Zak.St = [Kol]*Kat.[KCena];
· Удаление Получателя (удаление записи из таблицы Получатель по ее коду);
Запрос на удаление записи из таблицы Получатель (аналогично для остальных таблиц):
DELETE Pol.KPol, Pol.PNaim, Pol.PAdr
FROM Pol
WHERE (((Pol.KPol)=[Введите Код Получателя:]));
· Удаление Груза (удаление записи из таблицы Груз по ее коду);
· Удаление Транспорта (удаление записи из таблицы Транспорт по его коду);
· Удаление Заказа (удаление записи из таблицы Заказы по ее номеру);
· Удаление Категории (удаление записи из таблицы Категория)
Проектирование базы данных сетевого типа
Для проектирования базы сетевого типа разрабатывается диаграмма Бахмана:
|
Рис. 12
SYS – система, одна особая запись, вход в БД
P1, P2, P3, S1, S2, S3, S4 – физические наборы данных в БД, которые содержат тот или иной тип записи
С – вычисляемые записи (calc), записи, которые получены прямым доступом
V – записи через набор S1, S2, S3, S4
KPol, KKat, KGr, KZak, KTruns - первичные ключи.
Описание схемы базы данных
Описание схемы БД производится на Языке Описания Данных (ЯОД) и состоит из предложений пяти типов:
1. Имя схемы БД;
2. Описание файла данных;
3. Описание файла ключей;
4. Описание типов записей;
5. Описание наборов данных.
Data base Gruz; {
Data file ‘Gruz.dat’ contains system, KAT, ZAK, POL, GR TRANS;
Key file ‘Gruz.kly’ contains KKat, KZak, KPol, KGr KTrans;
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.