Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Пособие 988

.pdf
Скачиваний:
40
Добавлен:
20.04.2015
Размер:
934.62 Кб
Скачать

2.3. Ссылочная целостность и каскадные взаимодействия

Таблица Справочник ко- Таблица Регистрация междугородных

дов и тарифов

 

 

переговоров дочерняя

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Код

Стоимость

Код

 

Дата

Мину-

Номер

города

минуты

 

города

 

 

ты

телефона

820

1,21

 

820

 

3/17/99

10

273-33-14

336

1,93

 

820

 

3/17/99

5

444-89-76

862

1,93

 

336

 

3/18/99

30

444-89-76

 

 

 

862

 

3/18/99

6

273-33-14

 

 

 

413

 

3/18/99

7

555-90-87

Рис. 2.2. Связанные таблицы базы данных

Как можно заметить, дочерняя и родительская таблицы связаны между собой по общему полю Код города, которое и называется

полем связи.

Возможны два вида изменений, которые приведут к утере связей между записями в родительской и дочерней таблицах.

1.Изменение значения поля связи в записи родительской таблицы без изменения значений полей связи в соответствующих записях дочерней таблицы.

2.Изменение значения поля связи в одной из записей дочерней таблицы без соответствующего изменения значения полей связи

вродительской и дочерней таблицах.

Разберем случай 1. На рис. 2.3 показано изменение значения поля Код города с "820" на "999" в таблице Справочник кодов и тарифов. В таблице Регистрация междугородных переговоров зна-

чение поля связи "820" осталось прежним. В результате:

в дочерней таблице Регистрация междугородных переговоров

нет сведений о разговорах с городом, соответствующим коду

"999";

некоторые записи таблицы Регистрация междугородных пере-

говоров содержат сведения о разговорах с городом (код "820") о котором нет информации в таблице Справочник кодов и тари-

фов.

13

2. ПРОЕКТИРОВАНИЕ БАЗ ДАННЫХ

Таблица Справочник Таблица Регистрация междугородных

кодов и тарифов

 

 

переговоров дочерняя

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

 

 

 

 

 

 

Код

Стоимость

 

Код

 

Дата

Минуты

Номер

города

минуты

 

города

 

 

 

телефона

999

1,21

 

820

 

3/17/99

10

273-33-14

336

1,93

 

820

 

3/17/99

5

444-89-76

862

1,93

 

336

 

3/18/99

30

444-89-76

 

 

 

862

 

3/18/99

6

273-33-14

 

 

 

413

 

3/18/99

7

555-90-87

 

 

 

862

 

3/19/99

3

273-33-14

Рис. 2.3. Нарушение целостности базы данных вследствие изменения данных в родительской таблице

Разберем случай 2. Пусть в одной из записей таблицы Реги-

страция междугородных переговоров значение поля связи "820"

изменилось на "999" (рис. 2.4). В результате:

в дочерней таблице Регистрация междугородных переговоров

недостоверны сведения о разговорах с городом "820" (зарегистрирован один звонок вместо двух);

одна из записей таблицы Регистрация междугородных перего-

воров содержит данные о разговоре с городом (код "999"), сведения о котором (стоимость минуты) отсутствуют в таблице Спра-

вочник кодов и тарифов.

Таблица Справочник Таблица Регистрация междугородных

кодов и тарифов

 

переговоров дочерняя

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

 

 

 

 

 

Код

Стоимость

 

Код

Дата

Мину-

Номер

города

минуты

 

города

 

ты

телефона

820

1,21

 

999

3/17/99

10

273-33-14

336

1,93

 

820

3/17/99

5

444-89-76

862

1,93

 

336

3/18/99

30

444-89-76

 

 

 

862

3/18/99

6

273-33-14

 

 

 

413

3/18/99

7

555-90-87

 

 

 

862

3/19/99

3

273-33-14

Рис 2.4. Нарушение целостности базы данных вследствие ошибочного ввода данных в дочернюю таблицу

14

2.3.Ссылочная целостность и каскадные взаимодействия

Вслучаях 1 и 2 мы наблюдаем нарушение целостности базы данных, поскольку информация в ней становится недостоверной. Следовательно, нужно блокировать действия, которые нарушают целостность связей между таблицами, которую называют ссылочной целостностью. Когда говорят о ссылочной целостности, имеют в виду совокупность связей между отдельными таблицами во всей БД. Нарушение хотя бы одной такой связи делает информацию в БД недостоверной.

Чтобы предотвратить потерю ссылочной целостности, используется механизм каскадных изменений. Он состоит в обеспечении следующих требований:

запретить изменение поля связи в записи дочерней таблицы без синхронного изменения полей связи в родительской и дочерней таблицах (обычно инициатива изменения поля связи реализуется в записи родительской таблицы);

при изменении поля связи в записи родительской таблицы, следует синхронно изменить значения полей связи в соответствующих записях дочерней таблицы:

при удалении записи в родительской таблице, следует удалить соответствующие записи в дочерней таблице.

Вышеперечисленные изменения/удаления в записях дочерней

таблицы при изменении/удалении записи родительской таблицы называются каскадными изменениями и каскадными удалениями.

Замечание. Обычно занесение записей в дочернюю таблицу осуществляется так: выбирается значение родительской записи (например, из выпадающего списка), значение поля связи фиксируется и затем автоматически заносится в поля связи дочерних записей. Метод, когда пользователь вручную заносит значения полей связи в дочерние записи, непопулярен: пользователь может внести одинаковое по смыслу, но разное по написанию значение ("Смирнов", "СМИРНОВ").

Каскадные изменения могут блокироваться: или одновременно изменения и удаления, или изменения и удаления по отдельности. Необходимость разрешения или запрещения каскадных изменений обычно реализуется в СУБД при определении связей между таблицами. Собственно, таким образом и происходит создание ссылочной целостности.

Обычно в СУБД для реализации ссылочной целостности в дочерней таблице создают внешний ключ – индекс (см. подраздел 2.4), значения которого совпадают со значением ключевого поля в родительской таблице.

15

2.4. Индексы и методы доступа к данным

Индекс состоит из значения ключевого выражения и ссылки на номер записи, соответствующей этому значению.

Индексы представляют собой механизмы быстрого доступа к данным в таблицах БД.

Рассмотрим таблицу Регистрации междугородных перего-

воров, имеющую следующий естественный порядок записей:

Номер

Номер

Дата

Код

Длительность

записи

телефона

 

города

разговора

1

273-33-14

3/17/99

820

10

2

444-89-76

3/17/99

820

5

3

444-89-76

3/18/99

336

30

4

273-33-14

3/18/99

862

6

5

555-90-87

3/18/99

413

7

6

273-33-14

3/19/99

862

3

Для этой таблицы индексы с логической точки зрения выгля-

дят так:

 

 

 

 

 

– по дате:

 

– по коду города:

– по продолжительности:

 

 

 

 

 

 

 

Дата

 

Номер

Код города

Номер

Длительность

Номер

 

 

записи

 

записи

разговора

записи

3/17/99

 

1

336

3

3

6

3/17/99

 

2

413

5

5

2

3/18/99

 

3

820

1

6

4

3/18/99

 

4

820

2

7

5

3/18/99

 

5

862

4

10

1

3/19/99

 

6

862

6

30

3

Следовательно, если нужно выбрать все записи с кодом "820", то нет нужды просматривать всю таблицу. Достаточно найти в индексе, построенном по столбцу Код города, первый указатель на запись, содержащую код "820", и считать из таблицы эту запись, а затем повторить те же действия для всех иных указателей в индексе на записи с кодом "820".

16

2.4. Индексы и методы доступа

Если нужно считать все записи, удовлетворяющие условию Длительность разговора > 8, то достаточно найти в индексе, построенном по столбцу Длительность разговора, первую строку со значением больше 8, считать запись из таблицы по указателю на нее, записанному в индексе, и в дальнейшем повторить эти действия для всех записей, у которых значение в поле Длительность разговора в индексе больше 8.

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

Вописанном примере мы сталкиваемся с двумя методами доступа к записям в таблице – последовательным и индекснопоследовательным. При этом индексно-последовательный доступ неявно использует прямой и последовательный доступ.

При последовательном методе доступа для выполнения запроса к таблице БД просматриваются все записи таблицы, от первой до последней. Время выполнения запроса прямо пропорционально числу записей в таблице.

При индексно-последовательном методе доступа для вы-

полнения запроса к таблице БД указатель в индексе устанавливают на первую строку, удовлетворяющую условию запроса, и считывают запись из таблицы по хранящемуся на нее указателю в индексе. Затем указатель в индексе перемещается на следующую строку, удовлетворяющую условию запроса, и из таблицы считывается запись. То же происходит для всех строк в индексе, удовлетворяющих условию запроса. Процесс выборки прекращается, когда текущая строка в индексе перестанет удовлетворять условию запроса.

При индексно-последовательном доступе просматривается только часть индекса, а из таблицы читаются только записи, удовлетворяющие условию поиска. Метод назван индекснопоследовательным потому, что:

поиск ведется по индексу, а не по самой таблице;

поиск в индексе начинается только с первой строки, удовлетворяющей условию запроса или его части (так называемый прямой доступ);

строки в индексе, начиная с такой записи, просматриваются всетаки последовательно.

Таким образом, индексно-последовательный метод использу-

ет прямой доступ при установке в индексе на первую строку, удовле-

17

2. ПРОЕКТИРОВАНИЕ БАЗ ДАННЫХ

творяющую запросу или его части. После этого используют последовательный метод доступа для перемещения по строкам индекса.

2.5. Типы таблиц БД

Таблицы БД различают по способу формирования в них информации и по их изменчивости в процессе работы с БД.

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

В рассматриваемой БД в качестве операционной таблицы вы-

ступает таблица Регистрация междугородных переговоров.

Справочные таблицы содержат информацию, обладающую невысокой степенью изменчивости и, как правило, находятся с операционными таблицами в отношении один-ко-многим, являясь при этом родительскими таблицами.

Врассматриваемой БД, содержащей информацию о междугородных переговорах, справочными таблицами являются Справоч-

ник абонентов МТС и Справочник кодов и тарифов.

Входе эксплуатации информационных систем, работающих с БД, приходится иметь дело с исходной и результирующей информацией. Например, в системе учета междугородных переговоров ежедневно поступает информация о звонках по междугородней связи в таблицу Регистрация междугородных переговоров. На выходе мо-

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

18

3. ПРИМЕР СОЗДАНИЯ БАЗЫ ДАННЫХ МТС

Цель работы – создать средствами СУБД Access 2000 базу данных, позволяющую вести учет междугородных переговоров и выписывать счета абонентам.

3.1.Основные объекты Access

ВСУБД Access база данных хранится в виде файла со стандартным расширением .mdb и может содержать следующие объекты:

таблицы;

формы;

отчеты;

запросы;

макросы;

модули,

доступ к которым осуществляется через окно БД.

СУБД Access предоставляет несколько средств создания каждого из основных объектов базы. Эти средства можно классифицировать как:

ручные (разработка объектов в режиме конструктора);

автоматизированные (разработка с помощью программ – мастеров);

автоматические – средства ускоренной разработки простейших объектов.

3.1.1. Таблицы

Создание базы данных всегда начинается с создания хотя бы одной таблицы.

Структуру таблицы образует набор полей, поэтому создать таблицу базы данных означает указать имена полей, их типы и свойства.

19

3. ПРИМЕР СОЗДАНИЯ БАЗЫ ДАННЫХ МТС

Имя поля определяет, как обращаться к данным этого поля при автоматических операциях с базой (по умолчанию имена полей используются в качестве заголовков столбцов таблиц).

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

Свойства полей

Размер поля определяет предельную длину (в символах) данных, которые могут размещаться в данном поле.

Формат поля определяет способ форматирования данных в ячейках, принадлежащих полю.

Маска ввода определяет форму, в которой вводятся данные в поле (средство автоматизации ввода данных).

Надпись определяет заголовок столбца таблицы для данного поля (если надпись не указана, то заголовок столбца совпадает с именем поля).

Значение по умолчанию – значение, которое вводится в ячейки поля автоматически (средство автоматизации ввода данных).

Условие на значение поля – ограничение, используемое для проверки правильности ввода данных (средство автоматизации ввода данных, которое используется, как правило, для данных имеющих числовой тип или тип даты).

Сообщение об ошибке – текстовое сообщение, которое выдается при попытке ввода ошибочных данных (если задано Условие на значение).

Обязательное поле определяет обязательность заполнения данного поля при вводе данных.

Индексированное поле – свойство поля, существенно ускоряющее операции сортировки и поиска записей по значению, хранящемуся в данном поле. Кроме того, для индексированных полей возможна проверка на наличие повторяющихся значений, что позволяет автоматически исключать дублирование данных.

Указанные свойства относятся в основном к полям текстового типа. Поля других типов могут не иметь этих свойств, но могут добавлять к ним свои (например, количество знаков после десятичной точки для числовых полей).

Таблицы баз данных позволяют использовать различные типы данных, часть из которых совпадает с типами данных, используе-

20

3.1. Основные объекты Access

мых в электронных таблицах (текстовые, числовые, даты и времени, логические), другие являются специфическими для баз данных, например Счетчик специальный тип данных для уникальных (не повторяющихся в поле) натуральных чисел с автоматическим наращиванием.

3.1.2. Формы

Ввод данных в таблицу возможен либо в режиме таблицы, либо с использованием специального средства для ввода данных, называемого формой. Различают следующие способы создания форм.

1.Создание автоформы: откройте нужную таблицу, нажмите кнопку раскрытия списка рядом с кнопкой Новый объект на панели инструментов и выберете элемент Автоформа.

2.Создание формы с помощью мастера форм и/или конструктора, которое рассматривается в разделе 4 настоящего пособия.

С помощью форм данные можно не только вводить, но и отображать. Вывод данных на форму рассматривается в разделе 4 настоящего пособия.

3.1.3. Запросы

Запросы служат для извлечения данных из таблицы и представления их пользователю в удобном виде. С помощью запросов выполняют такие операции как отбор данных, их сортировку и фильтрацию. С помощью запросов можно выполнять преобразование данных по заданному алгоритму, создавать новые таблицы, выполнять автоматическое наполнение таблиц данными, импортированными из других источников, выполнять простейшие вычисления в таблицах и многое другое.

Хотя многие операции, выполняемые с запросами можно делать и с таблицами, все же использование запросов во многих случаях предпочтительнее.

Во-первых, из соображений безопасности. Чем меньше доступа к базовым таблицам имеют конечные пользователи, тем лучше, т.к. тем меньше риск, что неумелым действием они повредят данные в таблицах.

Во-вторых, особенность запросов состоит в том, что они черпают данные из базовых таблиц и создают на их основе временную

21

3. ПРИМЕР СОЗДАНИЯ БАЗЫ ДАННЫХ МТС

результирующую таблицу. Основные таблицы хранятся на жестком диске, поэтому обращение к таблицам происходит достаточно медленно. Когда на основании запроса мы получаем результирующую таблицу, то имеем дело с электронной таблицей, не имеющей аналога на жестком диске, – это только «образ» отобранных полей и записей. Работа с «образом» происходит быстрее и эффективнее.

В-третьих, записи в таблицах обычно хранятся в естественном порядке. Если пользователю необходимо иметь их в отсортированном или отфильтрованном виде, то нет смысла переписывать и хранить одни и те же данные, но расположенные в другом порядке. Гораздо удобнее в этих случаях использовать соответствующие запросы.

Access предоставляет пользователю возможность работы с несколькими типами запросов, например, запросы на:

выборку;

создание таблицы;

обновление;

добавление;

удаление.

Спомощью запроса на выборку производится отбор данных из одной или нескольких таблиц/запросов по заданным пользователем условиям отбора.

Запросы на обновление, добавление и удаление позволяют соответственно изменять, добавлять и удалять данные в таблицах.

Еще один вид запроса – перекрестный – используется для отображения данных из двух таблиц.

Создание вычисляемого поля в запросе

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

Например, при выписке счетов за телефонные разговоры необходимо указывать стоимость каждого разговора и итоговую стоимость разговоров с одного номера телефона. Стоимость разговора определяется как произведение длительности разговора и стоимости 1 мин. разговора с соответствующим городом.

При вычислении стоимости каждого разговора можно учитывать различный тариф для личного и служебного телефона, т. е. создать еще один столбец в таблице Справочник кодов и тарифов

22