Создание структуры базы данных и разработка приложения для автоматизации учета кинопродукции

Автор работы: Пользователь скрыл имя, 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

Прикрепленные файлы: 1 файл

kursovaya.docx

— 1.83 Мб (Скачать документ)

Если все атрибуты являются простыми и их нельзя разделить на составные части (без потери смысла), то сущность находиться в первой нормальной форме. Для того чтобы привести данную систему учёта фильмы в магазине к первой нормальной форме, необходимо разделить сложные атрибуты на атомарные, связать сущности связью «один ко многим». Атрибуты, хранящие замысловатую информацию, необходимо разделить на более простые. Проанализировав данную систему работы книжного магазина, можно сделать вывод, что данная модель находиться в первой нормальной форме.

Если модель находится  в первой нормальной форме, отсутствуют  не ключевые атрибуты, зависящие от первичного ключа, то можно говорить, что модель находиться во второй нормальной форме. А так же, если сущность имеет первичный ключ и находится в первой нормальной форме, то можно говорить, что данная модель находится во второй нормальной форме. Рассмотрев данную модель учёта фильмы, можно сделать вывод, что она находится во второй нормальной форме, так как сущности находятся в первой нормальной форме и имеют первичные ключи (т.е. ключ, состоящий из одного атрибута).

Если сущность находится  во второй нормальной форме и отсутствуют  функциональные зависимости между  ее неключевыми атрибутами, то такая  сущность находится в третьей  нормальной форме. Проанализировав  данную систему учёта фильмы, можно сказать, что данная модель находится в третьей нормальной форме.

Таким образом, можно выделить 4 основных правила, которыми следует руководствоваться при проектировании и последующей нормализации таблиц базы данных:

  1. Каждое поле любой таблицы должно быть уникальным.
  2. Каждая таблица должна иметь уникальный первичный ключ, который может состоять из одного или нескольких полей таблицы.
  3. Для каждого значения первичного ключа должно быть одно и только одно значение любого из столбцов данных, и это значение должно относиться к объекту таблицы.
  4. Должна иметься возможность изменять значения любого поля (не входящего в первичный ключ), и это не должно повлечь за собой изменение другого поля.

Созданная таблица (Табл. 1) удовлетворяет вышеизложенным требованиям:

1 НФ (Нормальная Форма):

Табл. 1 «Ключевые поля таблиц»

Название таблицы

Ключевое поле

Фильмы

Производители

Жанры

Номер

КодПроизводителя

КодЖанра


 

2 НФ: выполняются ограничения 1НФ, и каждый не ключевой атрибут функционально полностью зависит от составного первичного ключа.

3 НФ: все неключевые атрибуты отношения взаимно независимы и полностью зависят от первичного ключа.

Таким образом, база данных удовлетворяет всем требованиям  нормализации таблиц и Третья нормальная форма – окончательный результат нормализации Базы данных проекта.

      1. Синтез отношений: атрибутивная связь.

Отношения – это правила, поддерживаемые на уровне механизма реализации СУБД. Различают три типа отношений:

  • Отношение «один-к-одному»: для каждой строки в одной таблице существует не более одной строки связанной таблицы.
  • Отношение «один-ко-многим»: одна таблица не содержит вообще или имеет набор связанных «дочерних» записей из другой таблицы.
  • Отношение «многие-ко-многим»: для каждой строки первой таблицы может существовать набор строк в другой таблице и наоборот. Такая связь организуется, как правило, при помощи третьей, связующей таблицы, содержащей значения первичных ключей обеих таблиц в качестве внешних ключей.

При разработке БД необходимо принимать во внимание правила обеспечения целостности данных (обеспечивает каскадное обновление записей в связанных таблицах).

При проектировании БД информацию обычно размещают в нескольких таблицах. Таблицы при этом связывают с семантикой информации. В реляционной СУБД для указания связей в таблице производят операции их связывания.

В данном проекте сущности «фильмы» и «жанры», «фильмы» и «производители» соединены между собой связями «один ко многим» (Рис. 2). Здесь первая связь говорит о том, что несколько фильмов относятся к одному жанру, вторая связь – несколько фильмов могут быть выпущены одним производителем.

    1. Физическое моделирование

      1. Таблицы базы данных

Создадим таблицы для  базы данных книжного магазина: Фильмы, Производители, Жанры. Во всех таблицах в режиме конструктора указываются первичные.

 

Таблица Фильма (Рис. 2): предназначена для хранения всех фильмы с полным  их описанием. Например, кем произведены, по какой цене и в каком количестве.

Рис. 2 «Таблица фильмов»

 

  1. Номер – номер фильма.  Поле является счетчиком.
  2. Название – поле, в котором содержится название фильма. Формат поля – текстовый.
  3. Код Жанра -  жанр фильма. Берется из таблицы Жанры. Совпадает со значением поля "Код Жанра" в таблице "Жанры". Формат поля – числовой.
  4. Автор – автор фильма. Формат поля – текстовый.
  5. Код Производителя – производитель фильма. Берется из таблицы Производители. Совпадает со значением поля "КодПроизводителя" в таблице "Производители". Формат поля – числовой.
  6. Характеристика – поле, в котором содержится описание фильма. Формат поля – текстовый.
  7. Цена – цена за один фильм. Чтобы систематизировать столбец, надо указать формат поля - денежный.
  8. Количество – количество фильмы. Если значение равно нулю, то фильма нет в наличие. Формат поля – числовой.

 

Таблица Производители (Рис. 3): содержит 5 полей:

Рис. 3 «Таблица производители»

 

    1. КодПроизводителя - поле является счетчиком. Номер, однозначно определяющий поставщика.
    2. Производитель – поставщик фирма-производитель фильма. Формат поля – текстовый.
    3. Адрес, страна и телефон – более подробная информация. Все поля таблицы заполняются пользователем.

 

Таблица Жанры (Рис. 4): состоит из двух полей:

Рис. 4 «Таблица жанры»

 

        1. КодЖанра - поле является счетчиком. Номер, однозначно определяющий жанр.

2. Жанр – название жанра. Формат поля – текстовый.

На этом этапе также  необходимо ввести в таблицу данные о производителях, т.к. книжный магазин проекта имеет только трех поставщиков (производителей фильмы).

На рисунке 5 представлена связь таблиц: схема данных.

Рис. 5 «Схема данных»

 

      1. Разработка приложения доступа к данным в формате MS      Acsess в Delphy

Для начала необходимо создать главную форму для базы данных и создать подключение, к базе, используя компонент 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 (открытие других соединений с разрешениями запрещено), а  свойство TADOConnection Connected - True. В итоге - подключение к базе активировано.

Для того чтобы сделать форму главной MDI формой, для этого в инспекторе объектов в свойствах Form1 свойство FormStyle надо установить в fsMDIForm.

Чтобы создать раскрывающееся меню, необходимо добавить на форму компонент 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 устанавливаем  свойство  Caption  -> Добавить новый жанр, для Button устанавливаем  свойство  Caption  -> Удалить жанр.

Для 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 Жанр»

Обработчики событий для кнопок: 

  1. Для кнопки Добавить новый жанр прописываем следующий код:

procedure TForm_prosm.Button1Click(Sender: TObject);

begin

//новая запись

form_general.group.Append;

dbgrid2.SetFocus

 

end;

  1. Для кнопки Удалить жанр прописываем следующий код:

procedure T TForm_prosm.Button2Click(Sender: TObject);

begin

//если записи  отсутствуют то выводим сообщение,  иначе удаляем запись

  if dbgrid3.DataSource.DataSet.RecordCount<>0  then

       begin

        if (MessageBox(Handle, 'Удаление записей может  привести к нарушению работы всей базы данных. Удалить запись?', 'Внимание !!!', MB_YESNO)=  IDYES) then

           form_general.group.Delete

       end

                                                else ShowMessage('Нет записей для удаления');

end;

 

В инспекторе объектов для Form_prosm событие FormActivate пишем:

procedure TForm_prosm.FormActivate(Sender: TObject);

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(Sender: TObject; var CanClose: Boolean);

//проверка на  наличие пустых записей перед  закрытием, если такие записи найдены то отменяем //закрытие формы

begin

if dbgrid1.DataSource.DataSet.RecordCount<>0  then begin

if not (form_general.book.Locate('ed_name', '', [loCaseInsensitive,loPartialKey])) then  begin form_general.book.edit; form_general.book.post; end

                                                             else begin ShowMessage('У Вас есть не заполненные записи');CanClose:=false;dbgrid1.SetFocus;end;

end;

end;

Теперь необходимо сделать  запуск формы «Просмотр и добавление» из главной формы. Для этого выбираем в меню Project -> Options… Выбираем Forms и перемещаем Form_prosm из Auto-create forms  в Avalable forms (Рис. 12).

Рис. 12 «Project Options»

Переходим на главную форму, щелкаем мышкой по компоненту MainMenu1, а затем по пункту Просмотр и добавление и пишем следующий обработчик события:

procedure TForm_general.N1Click(Sender: TObject);

begin

f:=0;

//проверяем, активна  ли наша форма

if ActiveMDIChild.Caption<>'Просмотр и добавление' then begin

//если нет то  ищем ее среди неактивных  и  если находим, то показываем  ее

for i:=0 to form_general.MDIChildCount-1 do

if form_general.MDIChildren[i].Caption='Просмотр и добавление' then begin

Информация о работе Создание структуры базы данных и разработка приложения для автоматизации учета кинопродукции