РНН владельца - Адрес стоянки авто
РНН владельца - Пол
РНН владельца - Год рождения
РНН владельца - № уд. личности
РНН владельца - Дата выдачи
РНН владельца - Профессия
№ уд. личности - Дата выдачи
Признак владельца - Наименование
Видно, что, хотя первичным ключом является составной атрибут РНН владельца, Признак владельца, атрибут ФИО/Наименование зависит от части первичного ключа. В результат при Признаке владельца - юридическое лицо, мы не сможем вставить кортеж, с Полом, Годом рождения и Профессией владельца. Можно произвести следующую декомпозицию отношения Владельцы на два отношения: Владельцы - юр_лица и Владельцы-физ_лица.
Владельцы-юр_лица (РНН владельца, Признак владельца, Наименование, Адрес владельца, Адрес стоянки авто, Телефон)
Первичный ключ
РНН владельца, Признак владельца
Функциональные зависимости:
РНН владельца, Признак владельца - Наименование
РНН владельца, Признак владельца - Адрес владельца
РНН владельца, Признак владельца - Телефон
РНН владельца, Признак владельца - Адрес стоянки авто
Владельцы-физ_лица (РНН владельца, Признак владельца, ФИО, Адрес владельца, Телефон, Адрес стоянки авто, Пол, Год рождения, № уд. личности, Дата выдачи, Профессия)
РНН владельца, Признак владельца - ФИО
РНН владельца, Признак владельца - Адрес владельца
РНН владельца, Признак владельца - Телефон
РНН владельца, Признак владельца - Адрес стоянки авто
РНН владельца, Признак владельца - Пол
РНН владельца, Признак владельца - Год рождения
РНН владельца, Признак владельца - № уд. личности
РНН владельца, Признак владельца- Дата выдачи
РНН владельца, Признак владельца - Профессия
№ уд. личности - Дата выдачи
Каждое из этих двух отношений находятся в 2 NF
Третья нормальная форма
Рассмотрим отношение Владельцы-физ_лица. Функциональная зависимость РНН владельца - Дата выдачи является транзитивной; она является следствием функциональных зависимостей РНН владельца - № уд. личности и № уд. личности - Дата выдачи. То есть, дата выдачи является характеристикой удостоверения личности владельца.
Можно декомпозировать отношение Владельцы-физ_лица в два отношения Владельцы-физ_лица-уд. личности и Удостоверения личности:
Владельцы-физ_лица-уд. личности (РНН владельца, Признак владельца, ФИО, Адрес владельца, Телефон, Адрес стоянки авто, Пол, Год рождения, № уд. личности, Профессия)
Первичный ключ:
Возможные функциональные зависимости:
РНН владельца, Признак владельца - ФИО
РНН владельца, Признак владельца - Адрес владельца
РНН владельца, Признак владельца - Телефон
РНН владельца, Признак владельца - Адрес стоянки авто
РНН владельца, Признак владельца - Пол
РНН владельца, Признак владельца - Год рождения
РНН владельца, Признак владельца - № уд. личности
РНН владельца, Признак владельца - Профессия
Удостоверения личности (№ удостоверения личности, Дата выдачи)
Первичный ключ:
№ уд. личности
Возможные функциональные зависимости:
№ уд. личности - Дата выдачи
Каждое из этих двух отношений находится в 3NF.
Нормальная форма Бойса-Кодда
Рассмотрим схему отношения Владельцы-физ_лица-уд. личности (РНН владельца, Признак владельца, ФИО, Адрес владельца, Телефон, Адрес стоянки авто, Пол, Год рождения, № уд. личности, Профессия)
Здесь личность владельца может полностью определятся как именем, так и его РНН.
Можно произвести декомпозицию отношения в два отношения: Владельцы-физ_лица-имена и
Владельцы-физ_лица-имена (РНН владельца, ФИО)
Первичный ключ: РНН владельца
Функциональные зависимости:
РНН владельца - ФИО
Владельцы-физ_лица-атрибуты (РНН владельца, Признак владельца, Адрес владельца, Телефон, Адрес стоянки авто, Пол, Год рождения, № уд. личности, Профессия)
Первичный ключ: РНН владельца, Признак владельца
Возможные функциональные зависимости:
РНН владельца, Признак владельца - Адрес владельца
РНН владельца, Признак владельца - Телефон
РНН владельца, Признак владельца - Адрес стоянки авто
РНН владельца, Признак владельца - Пол
РНН владельца, Признак владельца - Год рождения
РНН владельца, Признак владельца - № уд. личности
РНН владельца, Признак владельца - Профессия
Четвертая нормальная форма
Видим, что каждому владельцу соответствует множество, состоящее из нуля или более значений атрибута телефон (А→В), также как и соответствует множество, состоящее из нуля или более значений атрибута адрес стоянки авто (А→С). Но телефон владельца авто не зависит от адреса стоянки авто.
Многозначные зависимости:
РНН владельца →→ Телефон
РНН владельца →→ Адрес стоянки авто
Можно произвести декомпозицию отношения:
Владельцы-физ_лица-телефоны (РНН владельца, Признак владельца, Адрес владельца, Телефон, Пол, Год рождения, № уд. личности, Профессия
Первичный ключ: РНН владельца, Признак владельца
Возможные функциональные зависимости:
РНН владельца, Признак владельца - Адрес владельца
РНН владельца, Признак владельца - Телефон
РНН владельца, Признак владельца - Пол
РНН владельца, Признак владельца - Год рождения
РНН владельца, Признак владельца - № уд. личности
РНН владельца, Признак владельца - Профессия
Владельцы-физ_лица-адреса стоянок (РНН владельца, Признак владельца, Адрес владельца, Адрес стоянки авто, Пол, Год рождения, № уд. личности, Профессия)
Первичный ключ: РНН владельца, Признак владельца
Возможные функциональные зависимости:
РНН владельца, Признак владельца - Адрес владельца
РНН владельца, Признак владельца - Адрес стоянки авто
РНН владельца, Признак владельца - Пол
РНН владельца, Признак владельца - Год рождения
РНН владельца, Признак владельца - № уд. личности
РНН владельца, Признак владельца - Профессия
Отношения находятся в 4NF
Пятая нормальная форма
Таблица находится в пятой нормальной форме 5NF, тогда и только тогда, когда в каждой ее полной декомпозиции все проекции содержат возможный ключ.
Декомпозиция отношений6
Владельцы-юр_лица_наименования (РНН владельца, Признак владельца, Наименование)
Первичный ключ
РНН владельца, Признак владельца
Функциональные зависимости:
РНН владельца, Признак владельца - Наименование
Владельцы-юр_лица_адреса владельцев (РНН владельца, Признак владельца, Адрес владельца)
Первичный ключ
РНН владельца, Признак владельца
Функциональные зависимости:
РНН владельца, Признак владельца - Адрес владельца
Владельцы-юр_лица_адреса стоянок авто (РНН владельца, Признак владельца, Адрес стоянки авто, Телефон)
Первичный ключ
РНН владельца, Признак владельца
Функциональные зависимости:
РНН владельца, Признак владельца - Адрес стоянки авто
Владельцы-юр_лица_телефоны (РНН владельца, Признак владельца, Телефон)
Первичный ключ
РНН владельца, Признак владельца
Функциональные зависимости:
РНН владельца, Признак владельца - Телефон
Владельцы-физ_лица-имена (РНН владельца, ФИО)
Первичный ключ: РНН владельца
Функциональные зависимости:
РНН владельца - ФИО
Владельцы-физ_лица_адреса владельцев (РНН владельца, Признак владельца, Адрес владельца)
Первичный ключ: РНН владельца, Признак владельца
РНН владельца, Признак владельца - Адрес владельца
Владельцы-физ_лица-телефоны (РНН владельца, Признак владельца, Телефон, рождения)
Первичный ключ: РНН владельца, Признак владельца
Возможные функциональные зависимости:
РНН владельца, Признак владельца - Телефон
Владельцы-физ_лица-адреса стоянок (РНН владельца, Признак владельца, Адрес стоянки авто)
Первичный ключ: РНН владельца, Признак владельца
Возможные функциональные зависимости:
РНН владельца, Признак владельца - Адрес стоянки авто
Владельцы-физ_лица-пол (РНН владельца, Признак владельца, Пол)
Первичный ключ: РНН владельца, Признак владельца
Возможные функциональные зависимости:
РНН владельца, Признак владельца - Пол
Владельцы-физ_лица-год рождения (РНН владельца, Признак владельца, Год рождения)
Первичный ключ: РНН владельца, Признак владельца
Возможные функциональные зависимости:
РНН владельца, Признак владельца - Год рождения
Владельцы-физ_лица-уд. личности (РНН владельца, Признак владельца, № уд. личности)
Первичный ключ: РНН владельца, Признак владельца
Возможные функциональные зависимости:
РНН владельца, Признак владельца - № уд. личности
Владельцы-физ_лица-профессии (РНН владельца, Признак владельца, Профессия)
Первичный ключ: РНН владельца, Признак владельца
Возможные функциональные зависимости:
РНН владельца, Признак владельца - профессия
Программа "РЭО-ГАИ" реализована на языке программирования Borland Delphi с подключением MSSQLServer 2000. Структуру программы составляют 4 класса и 6 программных модулей.
Модули данной программы подразделяются на:
1. Модуль Unit1, который находится в файле Unit1. pas содержит информацию о всех таблицах данной базы данных.
2. В модуле Unit2, находящемся в файле Unit2. pas происходит реализация класса TZaprosy (запросы).
3. Модуль Unit3 расположен в файле Unit3. pas, в котором находится реализация класса TOtchety (отчеты).
4. Модуль Unit4 расположен в файле Unit4. pas, в нем находится код описания класса TProcedury (процедуры).
5. Модуль Unit5, который расположен в файле Unit5. pas содержит реализацию класса TSpravka (справка).
6. Модуль Unit6 находится в файле Unit6. pas и содержит информацию об отчетах.
Запрос 1. Количество автотранспортных средств, принадлежащих каждому из владельцев.
SELECT [РНН владельца], COUNT ([№автомобиля])
FROM Автомобили
GROUPBY [РНН владельца]
ORDERBY [РНН владельца] ;
Запрос 2. Найти автомобиль по неполному номеру двигателя <…>