50136 (609952), страница 2
Текст из файла (страница 2)
Первичный ключ:
Возможные функциональные зависимости:
РНН владельца, Признак владельца - ФИО
РНН владельца, Признак владельца - Адрес владельца
РНН владельца, Признак владельца - Телефон
РНН владельца, Признак владельца - Адрес стоянки авто
РНН владельца, Признак владельца - Пол
РНН владельца, Признак владельца - Год рождения
РНН владельца, Признак владельца - № уд. личности
РНН владельца, Признак владельца - Профессия
Удостоверения личности (№ удостоверения личности, Дата выдачи)
Первичный ключ:
№ уд. личности
Возможные функциональные зависимости:
№ уд. личности - Дата выдачи
Каждое из этих двух отношений находится в 3NF.
Нормальная форма Бойса-Кодда
Рассмотрим схему отношения Владельцы-физ_лица-уд. личности (РНН владельца, Признак владельца, ФИО, Адрес владельца, Телефон, Адрес стоянки авто, Пол, Год рождения, № уд. личности, Профессия)
Здесь личность владельца может полностью определятся как именем, так и его РНН.
Можно произвести декомпозицию отношения в два отношения: Владельцы-физ_лица-имена и
Владельцы-физ_лица-имена (РНН владельца, ФИО)
Первичный ключ: РНН владельца
Функциональные зависимости:
РНН владельца - ФИО
Владельцы-физ_лица-атрибуты (РНН владельца, Признак владельца, Адрес владельца, Телефон, Адрес стоянки авто, Пол, Год рождения, № уд. личности, Профессия)
Первичный ключ: РНН владельца, Признак владельца
Возможные функциональные зависимости:
РНН владельца, Признак владельца - Адрес владельца
РНН владельца, Признак владельца - Телефон
РНН владельца, Признак владельца - Адрес стоянки авто
РНН владельца, Признак владельца - Пол
РНН владельца, Признак владельца - Год рождения
РНН владельца, Признак владельца - № уд. личности
РНН владельца, Признак владельца - Профессия
Четвертая нормальная форма
Видим, что каждому владельцу соответствует множество, состоящее из нуля или более значений атрибута телефон (А→В), также как и соответствует множество, состоящее из нуля или более значений атрибута адрес стоянки авто (А→С). Но телефон владельца авто не зависит от адреса стоянки авто.
Многозначные зависимости:
РНН владельца →→ Телефон
РНН владельца →→ Адрес стоянки авто
Можно произвести декомпозицию отношения:
Владельцы-физ_лица-телефоны (РНН владельца, Признак владельца, Адрес владельца, Телефон, Пол, Год рождения, № уд. личности, Профессия
Первичный ключ: РНН владельца, Признак владельца
Возможные функциональные зависимости:
РНН владельца, Признак владельца - Адрес владельца
РНН владельца, Признак владельца - Телефон
РНН владельца, Признак владельца - Пол
РНН владельца, Признак владельца - Год рождения
РНН владельца, Признак владельца - № уд. личности
РНН владельца, Признак владельца - Профессия
Владельцы-физ_лица-адреса стоянок (РНН владельца, Признак владельца, Адрес владельца, Адрес стоянки авто, Пол, Год рождения, № уд. личности, Профессия)
Первичный ключ: РНН владельца, Признак владельца
Возможные функциональные зависимости:
РНН владельца, Признак владельца - Адрес владельца
РНН владельца, Признак владельца - Адрес стоянки авто
РНН владельца, Признак владельца - Пол
РНН владельца, Признак владельца - Год рождения
РНН владельца, Признак владельца - № уд. личности
РНН владельца, Признак владельца - Профессия
Отношения находятся в 4NF
Пятая нормальная форма
Таблица находится в пятой нормальной форме 5NF, тогда и только тогда, когда в каждой ее полной декомпозиции все проекции содержат возможный ключ.
Декомпозиция отношений6
Владельцы-юр_лица_наименования (РНН владельца, Признак владельца, Наименование)
Первичный ключ
РНН владельца, Признак владельца
Функциональные зависимости:
РНН владельца, Признак владельца - Наименование
Владельцы-юр_лица_адреса владельцев (РНН владельца, Признак владельца, Адрес владельца)
Первичный ключ
РНН владельца, Признак владельца
Функциональные зависимости:
РНН владельца, Признак владельца - Адрес владельца
Владельцы-юр_лица_адреса стоянок авто (РНН владельца, Признак владельца, Адрес стоянки авто, Телефон)
Первичный ключ
РНН владельца, Признак владельца
Функциональные зависимости:
РНН владельца, Признак владельца - Адрес стоянки авто
Владельцы-юр_лица_телефоны (РНН владельца, Признак владельца, Телефон)
Первичный ключ
РНН владельца, Признак владельца
Функциональные зависимости:
РНН владельца, Признак владельца - Телефон
Владельцы-физ_лица-имена (РНН владельца, ФИО)
Первичный ключ: РНН владельца
Функциональные зависимости:
РНН владельца - ФИО
Владельцы-физ_лица_адреса владельцев (РНН владельца, Признак владельца, Адрес владельца)
Первичный ключ: РНН владельца, Признак владельца
РНН владельца, Признак владельца - Адрес владельца
Владельцы-физ_лица-телефоны (РНН владельца, Признак владельца, Телефон, рождения)
Первичный ключ: РНН владельца, Признак владельца
Возможные функциональные зависимости:
РНН владельца, Признак владельца - Телефон
Владельцы-физ_лица-адреса стоянок (РНН владельца, Признак владельца, Адрес стоянки авто)
Первичный ключ: РНН владельца, Признак владельца
Возможные функциональные зависимости:
РНН владельца, Признак владельца - Адрес стоянки авто
Владельцы-физ_лица-пол (РНН владельца, Признак владельца, Пол)
Первичный ключ: РНН владельца, Признак владельца
Возможные функциональные зависимости:
РНН владельца, Признак владельца - Пол
Владельцы-физ_лица-год рождения (РНН владельца, Признак владельца, Год рождения)
Первичный ключ: РНН владельца, Признак владельца
Возможные функциональные зависимости:
РНН владельца, Признак владельца - Год рождения
Владельцы-физ_лица-уд. личности (РНН владельца, Признак владельца, № уд. личности)
Первичный ключ: РНН владельца, Признак владельца
Возможные функциональные зависимости:
РНН владельца, Признак владельца - № уд. личности
Владельцы-физ_лица-профессии (РНН владельца, Признак владельца, Профессия)
Первичный ключ: РНН владельца, Признак владельца
Возможные функциональные зависимости:
РНН владельца, Признак владельца - профессия
3. Структура программы
Программа "РЭО-ГАИ" реализована на языке программирования Borland Delphi с подключением MSSQL Server 2000. Структуру программы составляют 4 класса и 6 программных модулей.
3.1 Описание модулей
Модули данной программы подразделяются на:
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 и содержит информацию об отчетах.
3.2 Описание запросов выполняемых в программе
Запрос 1. Количество автотранспортных средств, принадлежащих каждому из владельцев.
SELECT [РНН владельца], COUNT ([№автомобиля])
FROM Автомобили
GROUP BY [РНН владельца]
ORDER BY [РНН владельца] ;
Запрос 2. Найти автомобиль по неполному номеру двигателя
SELECT [№автомобиля], [№двигателя]
FROM Автомобили
WHERE [№двигателя] LIKE '%111%';
Запрос 3. Вычислить "возраст" каждого из автомобилей, стоящих на учете на текущую дату.
SELECT Движение. [№автомобиля], 'Возраст =', datediff (yy, Автомобили. [Дата выпуска],getdate ())
FROM Движение, Автомобили, Операции
WHERE Автомобили. [№автомобиля] =Движение. [№автомобиля]
and Операции. [Код операции] =Движение. [Код операции]
and Операции. [Наименование] like '%постан%'
and [Дата операции] < getdate ();
Запрос 4. Какие операции проводились с автомобилями по
SELECT Движение. [№автомобиля], Районы_учета. [Наименование района учета], Операции. [Наименование операции]
FROM Операции, Районы_учета, Движение
WHERE Районы_учета. [Код района учета] =Движение. [Код района учета]
AND Операции. [Код операции] =Движение. [Код операции]
AND Районы_учета. [Наименование района учета] ='Казыбек-бийский'
AND month ([Дата операции]) =month (getdate ());
Запрос 5. Автомобили, каких категорий цветов поставлены на учет в текущем году.
SELECT Движение. [№автомобиля], Категории_цвета. [Наименование категории цвета]
FROM Категории_цвета, Цвета, Автомобили, Операции, Движение
WHERE Категории_цвета. [Код категории цвета] =Цвета. [Код категории цвета]
AND Цвета. [Код цвета] =Автомобили. [Код цвета]
AND Автомобили. [№автомобиля] =Движение. [№автомобиля]
AND Операции. [Наименование операции] = 'Постановка на учет'
AND year (Движение. [Дата операции]) =year (getdate ());
Отчет 1. Карточка учета автотранспортного средства
SELECT Движение. [№автомобиля],
Движение. [РНН владельца],
Операции. [Наименование операции],
Районы_учета. [Наименование района учета],
Движение. [Дата операции]
FROM Движение, Операции, Районы_учета
WHERE Районы_учета. [Код района учета] = Движение. [Код района учета]
AND Операции. [Код операции] = Движение. [Код операции] ;
Отчет 2. Отчет о движении транспортных средств на "I-ю" дату
SELECT Движение. [Дата операции],
Движение. [№автомобиля],
Движение. [РНН владельца],
Районы_учета. [Наименование района учета],
Операции. [Наименование операции]
FROM Движение, Районы_учета, Операции
WHERE Районы_учета. [Код района учета] = Движение. [Код района учета]
AND Операции. [Код операции] = Движение. [Код операции]
AND year (Движение. [Дата операции]) =year ('13 October 2007')
and month (Движение. [Дата операции]) =month ('13 October 2007')
and day (Движение. [Дата операции]) =day ('13 October 2007');
Отчет 3. Список автомобилей, владельцами которых являются физические лица
SELECT Движение. [№автомобиля],
Категории_цвета. [Наименование категории цвета]
FROM Категории_цвета, Цвета, Автомобили, Операции, Движение
WHERE Категории_цвета. [Код категории цвета] =Цвета. [Код категории цвета]
AND Цвета. [Код цвета] =Автомобили. [Код цвета]
AND Автомобили. [№автомобиля] =Движение. [№автомобиля]
AND Операции. [Наименование операции] = 'Постановка на учет'
AND year (Движение. [Дата операции]) =year (getdate ());
Описание процедур выполняемых в программе
Процедура 1. Необходимо выбрать автомобили, возраст которых не превышает 10 лет.
USE РЭО_ГАИ
GO
CREATE PROCEDURE Vyboravto1
AS
SELECT *
FROM Автомобили
WHERE year ([Дата выпуска]) > year ('01 January 1997')
GO
execute Vyboravto1
go
Процедура 2. Необходимо выбрать автомобили определенной марки и с определенным типом кузова.
USE РЭО_ГАИ
GO
CREATE PROCEDURE Vyboravto2 @marka_id int, @kuzov_id int
AS
SELECT *
FROM Автомобили
WHERE [Код марки авто] = @marka_id
and [Код типа кузова] = @kuzov_id
GO
USE РЭО_ГАИ
GO
EXECUTE Vyboravto2 2, 2
GO
Заключение
В первом разделе данного курсового проекта была описана постановка задачи с нововведениями и дополнениями со стороны разработчика.
Во втором и третьем разделах была описана структура разработанной базы данных и структура хранимой в ней информации. Также были подробно описаны связи между таблицами.
В четвертом разделе была описана структура программы, её классы и модули.
В пятом разделе было представлено подробное руководство по использованию программы.
Приложение
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Menus, DB, ADODB, ExtCtrls, DBCtrls, Grids, DBGrids, ComCtrls;
type
TForm1 = class (TForm)
MainMenu1: TMainMenu;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
N4: TMenuItem;
N5: TMenuItem;
N6: TMenuItem;
N7: TMenuItem;
N8: TMenuItem;
N9: TMenuItem;
N10: TMenuItem;
N11: TMenuItem;
N12: TMenuItem;
N13: TMenuItem;
N14: TMenuItem;
N15: TMenuItem;
N16: TMenuItem;
ADOTable1: TADOTable;
DataSource1: TDataSource;
DBGrid1: TDBGrid;
DBNavigator1: TDBNavigator;
StatusBar1: TStatusBar;