Добавлен: 28.11.2018

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

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

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

 

46

В

 

этом

 

случае

 

можно

 

создать

 

таблицу

  (

рис

. 2.7), 

в

 

которой

 

каждому

 

подразделению

 

организации

 

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

 

одна

 

за

-

пись

Эта

 

запись

 

ссылается

 

на

 

запись

соответствующую

 

под

-

разделению

 

более

 

высокого

 

уровня

в

 

которое

 

входит

 

данное

 

подразделение

И

 

только

 

в

 

записи

 

о

 

подразделении

 

самого

 

вы

-

сокого

 

уровня

 

нет

 

подобной

 

ссылки

 

 

под

-

раз

-

деления

 

Название

 

подразделения

 

 

 

подразделения

 

предыдущего

 

уровня

 

 

Департамент

 

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

 

 

Техническое

 

управление

 1 

Управление

 

разработки

 

и

 

экс

-

плуатации

 

программных

 

сис

-

тем

 


 

Отдел

 

сетевого

 

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

  2 

Ремонтный

 

отдел

 2 

АТС

 2 

Отдел

 

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

 3 

Отдел

 

разработки

 3 

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

 

группа

 7 

10 

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

 

группа

 7 

11 

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

 

бюро

 10 

 
 

Рис

. 2.7. 

Табличное

 

представление

 

структуры

 

организации

 

 
 

2.4. 

Ссылочная

 

целостность

 

Рассмотрим

 

наиболее

 

часто

 

встречающуюся

 

в

 

базах

 

данных

 

связь

 

один

-

ко

-

многим

Соответствующие

 

таблицы

 

показаны

 

на

 

рис

. 2.8. 

Как

 

можно

 

заметить

дочерняя

 

и

 

родительская

 

таблицы

 

связаны

 

между

 

собой

 

по

 

общему

 

полю

  «

Товар

». 

Назовем

 

это

 

поле

 

полем

 

связи

. 

 
 
 


background image

 

47

 
 
 

Таблица

 «

Товары

» 

 

         

Таблица

 «

Отпуск

 

товаров

» 

 
 
 
 
 
 
 
 
 
 
 

Рис

. 2.8. 

Связанные

 

таблицы

 

базы

 

данных

 

 
 

Возможны

 

два

 

вида

 

изменений

которые

 

приведут

 

к

 

утере

 

связей

 

между

 

записями

 

в

 

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

 

и

 

дочерней

 

таблицах

 

изменение

 

значения

 

поля

 

связи

 

в

 

записи

 

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

 

таб

-

лицы

 

без

 

изменения

 

значений

 

полей

 

связи

 

в

 

соответствующих

 

записях

 

дочерней

 

таблицы

 

изменение

 

значения

 

поля

 

связи

 

в

 

одной

 

из

 

записей

 

дочер

-

ней

 

таблицы

 

без

 

соответствующего

 

изменения

 

значения

 

полей

 

связи

 

в

 

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

 

и

 

дочерней

 

таблицах

Рассмотрим

 

первый

 

случай

На

 

рис

. 2.9 

показано

 

изменение

 

значения

 

поля

 «

Товар

» 

с

 «

Сахар

» 

на

 «

Рафинад

» 

в

 

таблице

 «

То

-

вары

». 

В

 

таблице

  «

Отпуск

 

товаров

» 

значение

 

поля

 

связи

  «

Са

-

хар

» 

осталось

 

прежним

В

 

результате

 

в

 

дочерней

 

таблице

  «

Отпуск

 

товаров

» 

для

 

товара

  «

Рафи

-

над

» (

таблица

 «

Товары

») 

нет

 

сведений

 

о

 

его

 

отпуске

 

со

 

склада

 

некоторые

 

записи

 

таблицы

  «

Отпуск

 

товаров

» 

содержат

 

сведения

 

об

 

отпуске

 

товара

  «

Сахар

», 

о

 

котором

 

нет

 

информа

-

ции

 

в

 

таблице

 «

Товары

». 

 
 
 
 
 
 

Товар 

Ед. изм. 

Цена 

ед. 

Сахар 

кг 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

 

48

Таблица

 «

Товары

»   

         

Таблица

 «

Отпуск

 

товаров

» 

 
 
 
 
 
 
 
 
 
 
 

Рис

. 2.9. 

Нарушение

 

целостности

 

базы

 

данных

записи

  

с

 

товаром

 «

Сахар

» (

таблица

 «

Отпуск

 

товаров

») 

не

 

имеют

 

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

 

записи

 

 

Рассмотрим

 

второй

 

случай

Пусть

 

в

 

одной

 

из

 

записей

 

табли

-

цы

  «

Отпуск

 

товаров

» 

значение

 

поля

 

связи

  «

Сахар

» 

изменилось

 

на

 «

Рафинад

» (

рис

. 2.10). 

В

 

результате

 

в

 

дочерней

 

таблице

  «

Отпуск

 

товаров

» 

недостоверны

 

све

-

дения

 

об

 

отпуске

 

со

 

склада

 

товара

  «

Сахар

» (

таблица

  «

Това

-

ры

»); 

 

одна

 

из

 

записей

 

таблицы

  «

Отпуск

 

товаров

» 

содержит

 

дан

-

ные

 

об

 

отпуске

 

товара

 «

Рафинад

», 

сведения

 

о

 

котором

 

отсутст

-

вуют

 

в

 

таблице

 «

Товары

». 

 

Таблица

 «

Товары

» 

 

         

Таблица

 «

Отпуск

 

товаров

» 

 
 
 
 
 
 
 
 
 
 
 

Рис

. 2.10. 

Нарушение

 

целостности

 

базы

 

данных

запись

 

с

 

товаром

 «

Рафинад

» (

таблица

 «

Отпуск

 

товаров

»)  

не

 

имеет

 

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

 

записи

 

Товар 

Ед. изм. 

Цена 

ед. 

Рафинад 

кг 10 

Макароны  кг 10 
Куры 

кг 30 

Фанта 

бут. 1л 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 

 

Товар 

Ед. изм. 

Цена 

ед. 

Сахар 

кг 10 

Макароны  кг 10 
Куры 

кг 30 

Фанта 

бут. 1л 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

 

49

И

 

в

 

первом

и

 

во

 

втором

 

случае

 

мы

 

наблюдаем

 

нарушение

 

целостности

 

базы

 

данных

это

 

означает

что

 

хранящаяся

 

в

 

ней

 

информация

 

становится

 

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

СУБД

 

обычно

 

блокирует

 

действия

которые

 

нарушают

 

цело

-

стность

 

связей

 

между

 

таблицами

т

.

е

нарушают

 

ссылочную

 

целостность

. 

Когда

 

говорят

 

о

 

ссылочной

 

целостности

имеют

 

в

 

виду

 

совокупность

 

связей

 

между

 

отдельными

 

таблицами

 

во

 

всей

 

БД

Нарушение

 

хотя

 

бы

 

одной

 

такой

 

связи

 

делает

 

информацию

 

в

 

БД

 

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

Чтобы

 

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

 

потерю

 

ссылочной

 

целостности

ис

-

пользуется

 

механизм

 

каскадных

 

изменений

. 

Он

 

состоит

 

в

 

обеспечении

 

следующих

 

действий

 

при

 

изменении

 

поля

 

связи

 

в

 

записи

 

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

 

таблицы

 

следует

 

синхронно

 

изменить

 

значения

 

полей

 

связи

 

в

 

соответст

-

вующих

 

записях

 

дочерней

 

таблицы

 

при

 

удалении

 

записи

 

в

 

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

 

таблице

 

следует

 

уда

-

лить

 

соответствующие

 

записи

 

в

 

дочерней

 

таблице

Изменения

 

или

 

удаления

 

в

 

записях

 

дочерней

 

таблицы

 

при

 

одновременном

 

изменении

  (

удалении

записи

 

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

 

таблицы

 

называются

 

каскадными

 

изменениями

 

и

 

каскадными

 

удалениями

Существует

 

другая

 

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

 

каскадного

 

удаления

при

 

удалении

 

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

 

записи

 

в

 

записях

 

дочерних

  

таблиц

 

зна

-

чения

 

полей

 

связи

 

обнуляются

Эта

 

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

 

применяется

 

редко

т

.

к

дочерние

 

таблицы

 

в

 

этом

 

случае

 

будут

 

содержать

 

избыточные

 

данные

например

сведения

 

о

 

товаре

которого

 

нет

 

на

 

складе

Обычно

 

для

 

реализации

 

ссылочной

 

целостности

 

в

 

дочерней

 

таблице

 

создают

 

внешний

 

ключ

в

 

который

 

входят

 

поля

 

связи

 

с

 

дочерней

 

таблицы

Этот

 

ключ

 

для

 

дочерней

 

таблицы

 

является

 

первичным

 

и

 

поэтому

 

по

 

составу

 

полей

 

должен

 

совпадать

 

с

 

пер

-

вичным

 

ключом

 

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

 

таблицы

 

или

 

реже

 – 

с

 

частью

 

первичного

 

ключа

 
2.5. 

Индексы

 

 

По

 

определениям

 

ключей

  (

первичных

 

или

 

вторичных

см

.         

п

. 2.2) 

СУБД

 

автоматически

 

строит

 

индексы

которые

 

представ

-

ляют

 

собой

 

механизмы

 

быстрого

 

доступа

 

к

 

хранящимся

 

в

 

таб

-

лицах

 

данным

.                     


background image

 

50

Сущность

 

индексов

 

состоит

 

в

 

том

что

 

они

 

хранят

 

отсортиро

-

ванные

 

значения

 

индексных

 

полей

  (

т

.

е

полей

по

 

которым

 

по

-

строен

 

индекс

и

 

указатель

 

на

 

запись

 

в

 

таблице

Например

пусть

 

имеется

 

таблица

показанная

 

на

 

рис

. 2.11. 

 

Порядко

-

вый

 

 

записи

 

 

Дата

 

прихода

 

товара

 

 

Наименование

 

товара

 

 

Количество

кг

 

 

1 10.12.1999 

Сахар

 10 

2 12.12.1999 

Картофель

 50 

3 12.12.1999 

Свекла

 20 

4 14.12.1999 

Сахар

 50 

5 14.12.1999 

Свекла

 10 

 

6 16.12.1999 

Сливы

 4 

 

 

Рис

. 2.11 

Физическая

 

структура

 

таблицы

 

 

С

 

логической

 

точки

 

зрения

 

ее

 

индексы

 

выглядит

 

так

как

 

по

-

казано

 

на

 

рис

. 2.12. 

 

Индекс

 

по

 

дате

 

прихода

 

товара

 

 

Индекс

 

по

 

наименова

-

нию

 

товара

 

 

Индекс

 

по

 

количеству

 

 

Дата

 

прихода

 

 

 

за

-

писи

 

 

Наименова

-

ние

 

товара

 

 

 

записи

 

 

Коли

-

чество

 

 

 

записи

 

 

10.12.99 1 

Картофель

 2 

12.12.99 2 

Сахар

 1  10 

12.12.99 3 

Сахар

 4  10 

14.12.99 4 

Свекла

 3  20 

14.12.99 5 

Свекла

 5  50 

16.12.99 6 

Сливы

 6  50 

 

Рис

. 2.12. 

Логическая

 

структура

 

индексов

 

 

Обратите

 

внимание

значения

 

полей

 

в

 

индексе

 («

Дата

 

прихо

-

да

», «

Наименование

 

товара

», «

Количество

») 

сортируются

 

по

 

возрастанию

, 

что

 

существенно

 

ускоряет

 

поиск

 

нужных

 

значе

-