Добавлен: 28.11.2018

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

Скачиваний: 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 

… … 

…