Базы данных - модели, разработка, реализация



         

Внешние объединения - часть 3


/p>

91

ФИО Дисциплина Оценка
Уткина Н. В. Сети и телекоммуникации 5
Трофимов П. А. Английский язык 5
Иванова Е. А. Английский язык 3
Уткина Н. В. Английский язык Null

Рассмотрим еще один пример, для этого возьмем БД "Библиотека". Она состоит из трех отношений, имена атрибутов здесь набраны латинскими буквами, что является необходимым в большинстве коммерческих СУБД,

  • BOOKS(ISBN. TITL. AUTOR. COAUTOR. YEARIZD. PAGES)
  • READER(NUM_READER, NAME_READER, ADRESS. HOOM_PHONE. WORK_PHONE. BIRTH_DAY)
  • EXEMPLAREUNV. ISBN. YES_NO. NUM_READER. DATEJN. DATE_OUT)
  • Здесь таблица BOOKS описывает все книги, присутствующие в библиотеке, она имеет следующие атрибуты:

  • ISBN - уникальный шифр книги;
  • TITL - название книги;
  • AUTOR - фамилия автора;
  • COAUTOR - фамилия соавтора;
  • YEARIZD - год издания;
  • PAGES - число страниц.
  • Таблица READER хранит сведения обо всех читателях библиотеки, и она содержит следующие атрибуты:

  • NUM_READER - уникальный номер читательского билета;
  • NAME_READER - фамилию и инициалы читателя;
  • ADRESS - адрес читателя;
  • HOOM_PHONE - номер домашнего телефона;
  • WORK_PHONE - номер рабочего телефона;
  • BIRTH_DAY - дату рождения читателя.
  • Таблица EXEMPLARE содержит сведения о текущем состоянии всех экземпляров всех книг. Она включает в себя следующие столбцы:

  • INV - уникальный инвентарный номер экземпляра книги;
  • ISBN - шифр книги, который определяет, какая это книга, и ссылается на сведения из первой таблицы;
  • YES_NO - признак наличия или отсутствия в библиотеке данного экземпляра в текущий момент;
  • NUM_READER - номер читательского билета, если книга выдана читателю, и Null в противном случае;
  • 92

  • DATE_IN - если книга у читателя, то это дата, когда она выдана читателю;
  • DATE_OUT - дата, когда читатель должен вернуть книгу в библиотеку.
  • Определим перечень книг у каждого читателя; если у читателя нет книг, то номер экземпляра книги равен NULL. Для выполнения этого поиска нам надо использовать левое внешнее объединение, то есть мы берем все строки из таблицы READER и соединяем со строками из таблицы EXEMPLARE, если во второй таблице нет строки с соответствующим номером читательского билета, то в строке результирующего отношения атрибут EXEMPLARE.INV будет иметь неопределенное значение NULL:




    Содержание  Назад  Вперед