Автор работы: Пользователь скрыл имя, 11 Января 2013 в 09:18, курсовая работа
В данной работе описано создание и оптимизация бизнес приложения базы данных в Delphi. База данных (database) – это самодокументируемый набор интегрированных записей. База данных самодокументирована, так как она содержит в дополнение к оригинальным данным пользователя, описание собственной структуры. Это описание называется словарем данных, каталог данных или метод данных.
Введение 3
1. Исследование предметной области 5
1.1. Постановка проблемы 5
1.2. Описание предметной области 5
1.3. Постановка задачи и обзор методов ее решения 6
2. Проектирование базы данных 8
2.1. Обоснование выбора проектных решений 8
2.2. Концептуальное проектирование: перечень сущностей и атрибутов 9
2.3. Модель «сущность-связь». 9
2.4. Реляционная модель БД 10
2.4.1. Выбор ключей 11
2.4.2. Нормализация отношений 11
2.4.3. Синтез отношений: атрибутивная связь. 13
2.5. Физическое моделирование 14
2.5.1. Таблицы базы данных 14
2.5.2. Разработка приложения доступа к данным в формате MS Acsess в Delphy 16
3. Тестирование базы данных 30
3.1. Тестирование: проверка корректной работы разработанного приложения 30
3.2. Работа с приложением: инструкция для пользователя 32
Заключение 36
БИБЛИОГРАФИЧЕСКИЙ СПИСОК 37
Если все атрибуты являются простыми и их нельзя разделить на составные части (без потери смысла), то сущность находиться в первой нормальной форме. Для того чтобы привести данную систему учёта фильмы в магазине к первой нормальной форме, необходимо разделить сложные атрибуты на атомарные, связать сущности связью «один ко многим». Атрибуты, хранящие замысловатую информацию, необходимо разделить на более простые. Проанализировав данную систему работы книжного магазина, можно сделать вывод, что данная модель находиться в первой нормальной форме.
Если модель находится в первой нормальной форме, отсутствуют не ключевые атрибуты, зависящие от первичного ключа, то можно говорить, что модель находиться во второй нормальной форме. А так же, если сущность имеет первичный ключ и находится в первой нормальной форме, то можно говорить, что данная модель находится во второй нормальной форме. Рассмотрев данную модель учёта фильмы, можно сделать вывод, что она находится во второй нормальной форме, так как сущности находятся в первой нормальной форме и имеют первичные ключи (т.е. ключ, состоящий из одного атрибута).
Если сущность находится во второй нормальной форме и отсутствуют функциональные зависимости между ее неключевыми атрибутами, то такая сущность находится в третьей нормальной форме. Проанализировав данную систему учёта фильмы, можно сказать, что данная модель находится в третьей нормальной форме.
Таким образом, можно выделить 4 основных правила, которыми следует руководствоваться при проектировании и последующей нормализации таблиц базы данных:
Созданная таблица (Табл. 1) удовлетворяет вышеизложенным требованиям:
1 НФ (Нормальная Форма):
Табл. 1 «Ключевые поля таблиц»
Название таблицы |
Ключевое поле |
Фильмы Производители Жанры |
Номер КодПроизводителя КодЖанра |
2 НФ: выполняются ограничения 1НФ, и каждый не ключевой атрибут функционально полностью зависит от составного первичного ключа.
3 НФ: все неключевые атрибуты отношения взаимно независимы и полностью зависят от первичного ключа.
Таким образом, база данных удовлетворяет всем требованиям нормализации таблиц и Третья нормальная форма – окончательный результат нормализации Базы данных проекта.
Отношения – это правила, поддерживаемые на уровне механизма реализации СУБД. Различают три типа отношений:
При разработке БД необходимо принимать во внимание правила обеспечения целостности данных (обеспечивает каскадное обновление записей в связанных таблицах).
При проектировании БД информацию обычно размещают в нескольких таблицах. Таблицы при этом связывают с семантикой информации. В реляционной СУБД для указания связей в таблице производят операции их связывания.
В данном проекте сущности «фильмы» и «жанры», «фильмы» и «производители» соединены между собой связями «один ко многим» (Рис. 2). Здесь первая связь говорит о том, что несколько фильмов относятся к одному жанру, вторая связь – несколько фильмов могут быть выпущены одним производителем.
Создадим таблицы для базы данных книжного магазина: Фильмы, Производители, Жанры. Во всех таблицах в режиме конструктора указываются первичные.
Таблица Фильма (Рис. 2): предназначена для хранения всех фильмы с полным их описанием. Например, кем произведены, по какой цене и в каком количестве.
Рис. 2 «Таблица фильмов»
Таблица Производители (Рис. 3): содержит 5 полей:
Рис. 3 «Таблица производители»
Таблица Жанры (Рис. 4): состоит из двух полей:
Рис. 4 «Таблица жанры»
2. Жанр – название жанра. Формат поля – текстовый.
На этом этапе также необходимо ввести в таблицу данные о производителях, т.к. книжный магазин проекта имеет только трех поставщиков (производителей фильмы).
На рисунке 5 представлена связь таблиц: схема данных.
Рис. 5 «Схема данных»
Для начала необходимо создать главную форму для базы данных и создать подключение, к базе, используя компонент TADOConnection.
Для этого необходимо зайти в «File»→ «New»→ «VCL Forms Application - Delphi» (Рис. 6).
Рис. 6 «Новая форма»
Для доступа к источникам данных ODBC используются компоненты категории «dbGO». Для связи с СУБД используется компонент «TADOConnection» (Рис. 7). Заполняя свойства данного компонента можно определить, каким именно образом и к какому источнику данных ODBC будет осуществляться доступ. Компонент TADOConnection и в свойстве LoginPromt нужно поставить на False. Это делается для того, чтобы при подключении к БД пароль не запрашивался. Параметры соединения хранятся в свойстве «ConnectionString». Для заполнения данного свойства используется специальный диалог настройки подключения к данным, который вызывается двойным щелчком по компоненту «TADOConnection».
Рис. 7 «TADOConnection»
Переход к настройке параметров
соединения происходит при нажатии
кнопки «Build…». Нужно выбрать провайдера,
а именно Microsoft Jet 4.0 OLE DB Provaider и нажать кнопку
«Далее». В данном окне указывается путь
к БД и имя пользователя по умолчанию Admin. Если
БД находится в корневом каталоге с программой,
то в данном поле достаточно указать ее
имя с расширением (например так: storage.mdb). Если
указать полный путь к базе, то при переносе
на другой компьютер путь к БД будет не
найден. В свойстве компонента TADOConnection
– Mode необходимо выбрать из выпадающего
списка cmShareDenyNone (открытие других соединений
с разрешениями запрещено), а свойство
Для того чтобы сделать форму
главной MDI формой, для этого в инспекторе
объектов в свойствах Form1 свойство
Чтобы создать раскрывающееся меню, необходимо добавить на форму компонент TMainMenu из вкладки Standard. Меню будет состоять из из трех разделов (Рис. 8) : 1) просмотр и добавление; 2) поиск; 3) отчет.
Рис. 8 «Главное меню»
Далее из панели компонентов dbGo (ADO) нужно разместить на форме четыре компонента TADOTable и к ним подключить справочники из базы данных. Но сначала их необходимо подключить к компоненту ADOConnection1 и к одноименным таблицам нашей БД и переименовать: ADOTable1 – book (TableName – Фильма), ADOTable2 –group (TableName – Жанры), ADOTable3 – proizv (TableName – Производители).
Активация: свойство Active -True
Также в инспекторе объектов свойство Caption главной формы (Form1) изменяем на Фильма, а свойство Name на Form_general. А чтобы форма разворачивалась на весь экран Align - alClient. В итоге получается следующее (Рис. 9):
Рис. 9 «Главная форма программы»
Теперь необходимо создать форму для добавления, удаления и просмотра информации о фильмах. Для этого нужно добавить новую форму: Caption -> Просмотр и добавление; FormStyle -> fsMDIChild; Name -> Form_prosm.
Теперь надо Uses general; после раздела implementation в программном модуле prosm, а в программном модуле unit general главной формы пропишем Uses prosm;. Это делается для того, чтобы установить связь между формами, иначе нельзя будет обращаться из одной формы к компонентам другой формы.
Далее размещаем на форме следующие компоненты: две кнопки TButton из вкладки Standart, три компонента TDataSource из вкладки Data Access, три компонента TDBGrid и один TDBNavigator из вкладки Data Controls.
Для Button1 устанавливаем свойство
Для DataSource1 DataSet -> Form_general.book, Name -> dsbook; для DataSource2 DataSet -> Form_general.group, Name -> dsgroup; для DataSource3 DataSet -> Form_general.proizv, Name -> dsproizv, (для данного компонента создадим отношение подчинения) MasterSours -> Form_prosm.dsbook, MasterFields -> КодПроизводителя (Рис.10).
Рис. 10 «MasterFields -> КодПроизводителя»
Для DBGrid1 DataSource -> dsbook; для DBGrid2 DataSource -> dsgroup; для DBGrid3 DataSource -> dsproizv.
Для TDBNavigator DataSource -> dsbook.
Теперь нужно переименовать поля таблиц. Для этого в главной форме в структуре каждого компонента TADOTable необходимо выбрать Add all fields. Все поля кодов сделаем невидимыми (Visible->False).
Для компонента TADOTable – book создадим отношение подстановки, чтобы можно было видеть жанр фильма в этой таблице. Добавим поле нажатием клавиш «Ctrl+N» или выбором пункта «New Field», затем заполним открывшееся окно следующим образом (Рис. 11):
Рис. 11 «New Field Жанр»
Обработчики событий для кнопок:
procedure TForm_prosm.Button1Click(
begin
//новая запись
form_general.group.Append;
dbgrid2.SetFocus
end;
procedure T TForm_prosm.Button2Click(
begin
//если записи
отсутствуют то выводим
if dbgrid3.DataSource.DataSet.
begin
if (MessageBox(Handle, 'Удаление записей может привести к нарушению работы всей базы данных. Удалить запись?', 'Внимание !!!', MB_YESNO)= IDYES) then
form_general.group.Delete
end
end;
В инспекторе объектов для Form_prosm событие FormActivate пишем:
procedure TForm_prosm.FormActivate(
begin
//установка фокуса при активации формы
dbgrid1.SetFocus;
end;
В инспекторе объектов для Form_prosm событие FormClose пишем:
procedure TForm_prosm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
//процедура закрытия формы
Action:=cafree;
end;
В инспекторе объектов для Form_prosm событие FormCloseQuery пишем:
procedure TForm_prosm.FormCloseQuery(
//проверка на наличие пустых записей перед закрытием, если такие записи найдены то отменяем //закрытие формы
begin
if dbgrid1.DataSource.DataSet.
if not (form_general.book.Locate('ed_
end;
end;
Теперь необходимо сделать
запуск формы «Просмотр и добавление» из
главной формы. Для этого выбираем в меню Project
-> Options… Выбираем Forms и перемещаем
Рис. 12 «Project Options»
Переходим на главную форму, щелкаем мышкой по компоненту MainMenu1, а затем по пункту Просмотр и добавление и пишем следующий обработчик события:
procedure TForm_general.N1Click(Sender: TObject);
begin
f:=0;
//проверяем, активна ли наша форма
if ActiveMDIChild.Caption<>'
//если нет то ищем ее среди неактивных и если находим, то показываем ее
for i:=0 to form_general.MDIChildCount-1 do
if form_general.MDIChildren[i].