Добавлен: 28.11.2018

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

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

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

41

Покупатель

Адрес

Телефон

Геракл

ТОО

107005, 

Москва

, 2-

я

Бауманская

ул

., 12 

273-00-14 

Пищеторг

ЗАО

  105066, 

Москва

Измайловский

б

-

р

, 18/11 

165-18-99 

База

 28 

274088, 

Хотьково

МО

ул

Лесная

17-54 

Рис

. 2.2. 

Пример

таблицы

 «

Покупатель

» 

Базы

данных

между

отдельными

таблицами

которых

суще

-

ствуют

связи

называются

реляционными

  (

от

  relation - 

связь

отношение

). 

Связанные

отношениями

таблицы

взаимодействуют

по

прин

-

ципу

главная

 (master) - 

подчиненная

 (detail). 

В

нашем

примере

таблица

  «

Отпуск

товаров

» - 

главная

а

таблица

  «

Покупатель

» - 

подчиненная

Главную

таблицу

часто

называют

родительской

, 

а

подчиненную

  

дочерней

. 

Одна

и

та

же

таблица

может

быть

главной

по

отношению

к

одной

таблице

БД

и

дочерней

по

отно

-

шению

к

другой

2.2. 

Первичные

ключи

и

индексы

В

каждой

таблице

БД

может

существовать

первичный

ключ

поле

или

набор

полей

однозначно

идентифицирующий

запись

Значение

первичного

ключа

в

таблице

БД

должно

быть

уникаль

-

ным

то

есть

в

таблице

не

должно

существовать

двух

или

более

записей

с

одинаковым

значением

первичного

ключа

Первичные

ключи

облегчают

установление

связи

между

таб

-

лицами

В

таблице

  «

Покупатель

» 

таким

ключом

является

одно

-

именное

поле

Установив

связь

по

первичному

ключу

мы

можем

выяснить

что

например

, 10.02.1999 

года

со

склада

было

отпу

-

щено

 100 

единиц

товара

  «

Сахар

» 

покупателю

  «

Геракл

ТОО

», 

офис

которого

расположен

по

адресу

: 107005, 

Москва

, 2-

я

Бау

-

манская

ул

., 12 (

телефон

для

связи

 273-00-14). 

Поскольку

первичный

ключ

должен

быть

уникальным

для

не

-

го

могут

использоваться

не

все

поля

таблицы

В

приведенном

примере

название

покупателя

вряд

ли

может

быть

уникальным

поэтому

поле

 «

Покупатель

» 

не

может

использоваться

в

качестве

первичного

ключа

Значительно

более

редким

является

совпа

-


background image

42

дение

телефонов

у

двух

разных

покупателей

поэтому

поле

«

Телефон

» 

в

большей

степени

подходит

на

роль

первичного

ключа

Если

в

таблице

нет

полей

значения

в

которых

уникаль

-

ны

для

создания

первичного

ключа

в

нее

обычно

вводят

допол

-

нительное

числовое

поле

значениями

которого

СУБД

может

распоряжаться

по

своему

усмотрению

Если

например

в

таб

-

лицу

  «

Покупатель

» 

добавить

поле

  «

№№

», 

то

связанные

табли

-

цы

будет

выглядеть

так

Дата

Товар

Покупатель

Отпущено

 (

ед

.) 

10.12.99 

Сахар

 1 

100 

10.12.99 

Сахар

 1 

100 

12.12.99 

Сахар

 2 

000 

12.12.99 

Макароны

 2 

300 

14.12.99 

Сахар

 1 

200 

15.12.99 

Дрожжи

 3 

100 

И

таблица

:  

№№

Покупатель

Адрес

Телефон


 

Геракл

ТОО

107005, 

Москва

,  

2-

я

Бауманская

ул

., 12 

273-00-14 

Пищеторг

ЗАО

105066, 

Москва

,  

Измайловский

б

-

р

165-18-99 

База

 28 

274088, 

Хотьково

МО

,  

ул

Лесная

, 1 

17-54 

Теперь

в

таблице

  «

Отпуск

товаров

» 

в

поле

  «

Покупатель

» 

указывается

значение

первичного

ключа

построенного

по

полю

«

№№

» 

таблицы

  «

Покупатель

», 

что

позволяет

установить

одно

-

значную

связь

между

таблицами

Вторичные

ключи

устанавливаются

по

полям

которые

час

-

то

используются

при

поиске

и

сортировке

данных

вторичные

ключи

  (

см

п

. 2.5) 

помогут

системе

значительно

быстрее

найти

нужные

данные

В

отличие

от

первичных

ключей

поля

для

ин

-

дексов

могут

содержать

неуникальные

значения

 - 

в

этом

собст

-


background image

43

венно

и

заключается

главная

разница

между

первичными

и

вторичными

ключами

2.3. 

Реляционные

отношения

между

таблицами

2.3.1. 

Отношение

один

-

ко

-

многим

Таблица

 «

Товары

» 

         

Таблица

 «

Отпуск

товаров

» 

 
 
 
 
 
 
 
 
 
 
 

Рис

. 2.3. 

Связь

один

-

ко

-

многим

Как

видно

из

рис

. 2.3, 

одной

записи

из

родительской

таблицы

«

Товары

» 

может

соответствовать

несколько

записей

в

дочерней

таблице

  «

Отпуск

товаров

». 

Обратите

внимание

на

глагол

мо

-

жет

: 

он

означает

что

такая

возможность

 - 

потенциальная

и

что

в

родительской

таблице

могут

быть

записи

для

которых

в

дан

-

ный

момент

нет

записей

в

дочерней

таблице

  (

например

товар

«

Куры

»). 

Различают

две

разновидности

связи

один

-

ко

-

многим

: 

в

пер

-

вом

случае

выдвигается

жесткое

требование

согласно

которому

всякой

записи

в

родительской

таблице

должны

соответствовать

записи

в

дочерней

таблице

во

втором

случае

подобное

требо

-

вание

не

носит

жесткого

характера

и

подразумевается

  (

как

в

описанном

выше

случае

), 

что

некоторые

записи

в

родительской

таблице

могут

не

иметь

связанных

с

ними

записей

в

дочерней

таблице

Связь

один

-

ко

-

многим

является

самой

распространенной

для

реляционных

баз

данных

Она

позволяет

моделировать

иерар

-

хические

структуры

данных

Товар 

Ед. изм. 

Цена 

ед. 

Сахар 

кг 10 

Макароны 

кг 10 

Куры 

кг 30 

Фанта 

бут . 2 л 20 

Товар 

Дата 

Кол-во 

(ед) 

Сахар 10.12.99 

100 

Сахар 12.12.99 

200 

Сахар 14.12.99 50 
Макароны 10.12.99  1 

000 

Макароны 11.12.99 

500 

Фанта 10.12.99 

000 

Фанта 12.12.99 

000 


background image

44

2.3.2. 

Отношение

один

-

к

-

одному

Отношение

один

-

к

-

одному

имеет

место

когда

одной

записи

в

родительской

таблице

соответствует

одна

запись

в

дочерней

таблице

 (

рис

. 2.4.). 

 
 

       

Таблица

 «

Сотрудники

»  

    

Таблица

 «

Информация

                

о

сотрудниках

» 

 
 
 
 
 
 
 

Рис

. 2.4 

Связь

один

-

к

-

одному

Данное

отношение

встречается

много

реже

чем

отношение

один

-

ко

-

многим

. 

Его

используют

если

не

хотят

чтобы

таблица

БД

  «

распухала

» 

от

второстепенной

информации

Связь

один

-

к

-

одному

приводит

к

тому

что

для

чтения

связанной

информации

в

нескольких

таблицах

приходится

производить

несколько

опе

-

раций

чтения

что

замедляет

получение

нужной

информации

Кроме

того

базы

данных

в

состав

которых

входят

таблицы

со

связью

один

-

к

-

одному

, 

не

могут

считаться

полностью

нормали

-

зованными

 (

о

нормализации

см

ниже

). 

Подобно

связи

один

-

ко

-

многим

связь

один

-

к

-

одному

может

быть

жесткой

и

нежесткой

 
2.3.3. 

Отношение

многие

-

ко

-

многим

На

рис

. 2.5 

показаны

таблицы

состоящие

в

отношении

мно

-

гие

-

ко

-

многим

. 

Каждой

учебной

группе

соответствует

несколько

преподавателей

Каждый

преподаватель

может

вести

во

-

первых

несколько

разных

предметов

и

во

-

вторых

преподавать

в

разных

группах

 
 
 

№ 

ФИО 

Должность 

Отдел 

Иванов И.И. 

инженер 10 

Петров П.П. 

бухгалтер 20 

Васин В.В. 

прораб 10 

… … 

… 

… 

№ 

Год 

рожд. 

Кол-во 

детей 

… 

1 1950 3 

… 

2 1952 1 

… 

3 1960 2 

… 

… … 

… 

… 


background image

45

Таблица

 «

Учебные

группы

   

    

Таблица

  

и

дисциплины

»  

    «

Преподаватели

» 

 
 
 
 
 
 
 
 
 
 
 
 
 
 

Рис

. 2.5. 

Связь

многие

-

ко

-

многим

Некоторые

СУБД

не

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

связи

многие

-

ко

-

многим

на

уровне

индексов

и

ссылочной

целостности

  (

см

следующий

подраздел

), 

хотя

и

позволяют

реализовывать

ее

в

таблицах

не

-

явным

образом

Считается

что

БД

всегда

можно

перестроить

так

чтобы

любая

связь

многие

-

ко

-

многим

была

заменена

на

одну

или

более

связей

один

-

ко

-

многим

 
2.3.4. 

Связи

между

записями

одной

таблицы

Между

записями

одной

таблицы

также

могут

существовать

связи

то

есть

одни

записи

могут

ссылаться

на

другие

Пусть

в

реляционной

БД

необходимо

хранить

древовидную

структуру

произвольного

уровня

например

структуру

организа

-

ции

 (

рис

. 2.6). 

Департамент

автоматизации

Техническое

управление

Отдел

сетевого

оборудования

Ремонтный

отдел

АТС

Управление

программными

системами

Отдел

эксплуатации

Информационная

группа

Административная

группа

Диспетчерское

бюро

Отдел

разработки

Рис

. 2.6. 

Структура

организации

Груп-

па 

Предмет 

№ препо-

давателя 

ПС-1  Программи-

рование 

10 

ТИ-1  Программи-

рование 

12 

ПС-1  Теория сис-

тем 

10 

РТ-2  Философия 62 
ПС-1  Социология 62 
… 

… … 

№ 

пре-

пода-

вате-

ля 

ФИО 

Кафед-

ра 

10 

Краснов Ю.Б. 

ТИ-1 

12 

Володин В.Н. 

ТИ-1 

62 

Булгаков В.М. 

РИО 

78 

Тоянский Л.С. 

ТИ-1 

85 

Подушкин М.А.  ЭИ-1 

… … 

…