Файл: Тема 23. Разработка многотабличной базы данных.pdf

Добавлен: 20.10.2018

Просмотров: 762

Скачиваний: 6

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
background image

Тема 23. Разработка многотабличной базы данных 

Задание. 

Построим  базу  данных  библиотечной  организации.  Основными 

объектами БД являются Читатели, Писатели и Книги. Писатели – авторы книг, 

читатели  –  потребители  книг.  В  общем  случае,  одна  книга  может  иметь 

несколько  авторов,  а  один  писатель  может  быть  автором  нескольких  книг. 

Читатель может держать на руках несколько разных книг, а одна книга может 

одновременно  использоваться  несколькими  читателями  (при  условии,  что  в 

библиотеке имеется несколько экземпляров этой книги). 

Общая схема связи объектов представлена на рис. 23.1. 

Связь множеств Читатели и Писатели «типа многие ко многим» (М:М) 

представляется  отношением  Абонемент,  каждый  кортеж  которого  связывает 

некоторую книгу и одного из читателей этой книги. Связь множеств  Книги и 

Писатели  представляется  отношением  Авторы  типа  М:М,  кортежи  которого 

связывают книгу и одного из ее авторов. 

 

 

 

 

 

 

 

 

Наборы  объектов  Читатели,  Книги,  Писатели  и  связывающие  их 

отношения  Абонемент  и  Авторы  в  реляционной  модели  представляются 

соответствующими таблицами. 

Схемы таблиц. 

Таблица Books (книги). 

Атрибуты: 

  BkId – идентификатор книги, тип Autoincrement, ключ таблицы; 

Книги 

Читатели 

Писатели 

Абонемент 

Авторы 

М 

М 

М 

М 

Рис. 23.1.Связи наборов объектов. 


background image

  Name – название книги, тип Alpha (30); 

  Number – количество экземпляров, тип Short

  Note – аннотация, тип Memo (30). 

Вторичный индекс BkInd по полю Name

Таблица Writers (писатели). 

Атрибуты: 

  WrId – идентификатор, тип Autoincrement, ключ; 

  Name – имя писателя, тип Alpha (30); 

  Biography – биография писателя, тип Memo (30). 

Вторичный индекс WrInd по полю Name

Таблица Readers (читатели). 

Атрибуты: 

  RdId – идентификатор, тип Autoincrement, ключ; 

  Name – имя читателя, тип Alpha (20); 

  Idate – дата записи, тип Date

  Note – замечания, тип Memo (30). 

Вторичный индекс RdInd  по полю Name

Таблица Abonement (aбонемент). 

Атрибуты: 

  RdId  –  идетификатор  читателя,  тип  Long  Integer,  ключевой 

атрибут; 

  BkId – идентификатор книги, тип Long Integer, ключевой атрибут. 

Таблица Authors (авторы). 

Атрибуты:  

  BkId – идентификатор книги, тип Long Integer, ключевой атрибут; 

  WrId  –  идентификатор  писателя,  тип  Long  Integer,  ключевой 

атрибут. 

 

 


background image

Задание 1.  

С  помощью  программы  Database  Desktop  создайте  БД  Bibliotheca

включающую  таблицы  Books,  Readers,  Writers,  Authors,  Abonement  и 

индексы BkInd, WrInd, RdInd. Занесите несколько записей в каждую таблицу. 

Обратите  внимание,  что  значения  полей  типа  Memo  не  отображаются  в  окне 

Database Desktop, но все введенное сохраняется в базе данных. 

Задание 2. Начало разработки приложения «Библиотека» 

Разрабатываемое 

приложение 

должно 

поддерживать 

операции 

добавления,  удаления  и  редактирования  книг,  авторов  и  читателей, 

обслуживать выдачу и возврат книг читателями. 

Разработка  приложения  начинается  с  определения  пользовательского 

графического  интерфейса.  В  нашем  случае,  ввиду  большого  числа 

выполняемых  приложением  функций,  в  основу  графического  интерфейса 

можно положить компонент PageControl (набор страниц), являющийся стопкой 

наложенных друг на друга страниц с корешками. Корешки позволяют выбирать 

текущую (видимую) страницу. 

Поместите  на  форму  объект  PageControl1  и  создайте  четыре  страницы: 

Книги, Читатели, Абонемент, Писатели. Первоначально объект PageControl1 

пуст.  Для  добавления  новой  страницы  надо  выполнить  команду  New  Page 

контекстного  меню.  Появляется  новый  объект  TabSheet1  (страница),  в 

клиентской  области  которого  можно  размещать  любые  компоненты  Delphi

Название страницы определяется свойством Caption объекта TabSheet1

Страница «Книги». 

Разместите  на  странице  указанные  на  рисунке  компоненты.  С  помощью 

инспектора  объектов  установите  связь  компонентов  Table1,  DataSource1  и 

DBGrid1 с таблицей Books. Свяжите Table2 и DataSource2 с таблицей Writers

а Table3 с таблицей Authors. Запретите редактирование компонента DBGrid1

разрешите редактирование наборов данных Table1, Table2, Table3. 

 

 


background image

 

 

 

 

 

 

 

 

 

 

Компонент  DBGrid1  позволяет просматривать имеющиеся  в  библиотеке 

книги,  авторы  книг  показываются  в  списке  ListBox1  при  нажатии  кнопки 

Button4. 

Для  определения  авторов  выбранной  в  DBGrid1  книги  используется 

связи таблиц Books, Writers и Authors

Books     

     Authors     

      Writers 

          {(главная)       (подчиненная)} 

                      {(главная)             (подчиненная)} 

Таблица Books является главной для Authors, а Authors – главной для Writers

Связи  устанавливаются  по  полям  BkId    (Books Authors)  и  WrId 

(Autors

Writers). 

Первая  связь  позволяет  выделить  в  отношении  Authors  все 

идентификаторы  писателей,  являющихся  авторами  книги,  а  вторая  помогает 

определить их имена. Сделайте наборы данных активными. 

Напишите обработчик события OnClick кнопки Button4. 

procedure TForm1Button1Click (…); 

Begin 

   ListBox1.Clear; 

   While not (Table3.EOF) do 

       Begin 

DBGrid1 

Button1 

Button2 

Button3 

Button4 

ListBox1 

Table1 

Table2 

Table3 

DataSource1 

DataSource2 


background image

          Поместить текущего автора 

(Table2.FieldByName(‘Name’).AsString)  

          В список ListBox1 (ListBox1.Items.Add(…)) 

          Table3.Next; 

      End; 

End; 

Сохраните  проект  и  проверьте  его  работу.  Придумайте  способ  очистки 

ListBox1 при изменении положения указателя выбранной книги в  DBGrid1 до 

нажатия кнопки Button4

Задание 3. Добавление новой книги. 

Добавьте  в  проект  новую  форму  Form2  и  установите  ее  свойства 

Caption=  «Добавить  книгу»,  BorderStyle=  bsDialog.  Форма  Form2  будет 

использоваться  как  модальное  окно,  запускаемое  на  выполнение  методом 

ShowModal.  Разместите  на  форме  управляющие  элементы.  Название  книги 

вводится  в  компонент  Edit1,  имена  авторов  в  компонент  Memo1.  Каждый 

очередной  автор  начинается  с  новой  строки  (для  перехода  на  новую  строку 

использовать  Enter).  Аннотация  заносится  в  объект  Memo2.  Информация 

сохраняется  в  БД  нажатием  кнопки  Button1.  Свяжите  Table1  с  таблицей 

Writers, а Table2 с Authors. Сделайте Table1 главной, а Table2 – подчиненной. 

Откройте наборы данных Table1, Table2

 

 

 

 

 

 

 

 

 

Обработчик