Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное пособие СУБД 2011.pdf
Скачиваний:
68
Добавлен:
10.06.2015
Размер:
2.75 Mб
Скачать

20

Рисунок 3.3. – Поведение поля-счётчика при добавлении новой записи

Рассказывая о ключах, мы пока не упомянули ещё один важный вид ключа – внешний. О нём мы поговорим в следующем подразделе, в котором мы рассмотрим один из способов устранения избыточности в R-таблицах.

Связь между таблицами

Внимательно изучите данные из таблицы Students. Не замечаете ли Вы в ней очередного изъяна? Профессиональному разработчику БД достаточно одного взгляда на поле “SpCod” чтобы сделать вывод о том, что наша таблица весьма неуважительно относится к дисковому пространству компьютера. И действительно, столбец, содержащий информацию о специальности, хранит многократно повторяющиеся значения: строка “Компьютерная безопасность” встречается дважды, а строка “ОиТЗИ” целых три раза. Наличие избыточных данных в таблице это один из верных признаков, что она не является реляционной.

Один из способов – разбиение таблицы с избыточными данными на две таблицы. В нашем случае за пределы таблицы Students выносится информация о специализации. Новая таблица будет содержать всего два поля:

1.Поле первичного ключа Spec_ID.

2.Поле названия специализации SpName. Создайте эту таблицу и назовите её “Spec” (рисунок 3.4).

Рисунок 3.4. – Таблица специализации

Ставропольский государственный университет, кафедра КБ

21

Заполните вновь созданную таблицу названиями специальностей – “Компьютерная безопасность” и “ОиТЗИ”.

Рисунок 3.5. – Содержание таблицы специализации

Наша таблица “Students” пока не способна воспринимать данные из вновь созданной справочной таблицы “Spec”. Для этого таблица студентов должна быть оснащена специальным полем, благодаря которому будет организовано взаимодействие с внешней таблицей. Такое поле называется внешним ключом, в него станут передаваться значения первичных ключей соответствующих специальностей.

Внешний ключ – это поле (или множество полей таблицы), которое соответствует первичному ключу некоторой (может быть, той же самой) таблицы.

Для создания внешнего ключа (рис. 3.6):

1.Откройте таблицу списка студентов в режиме конструктора.

2.Создайте числовое поле Spec_ID (размер поля “Длинное целое” – 4 байта). Это поле и будет внешним ключом.

3.Удалите из таблицы “Students” старое поле “SpCod”.

Рисунок 3.6. – Создание поля внешнего ключа в таблице “Students”

Ставропольский государственный университет, кафедра КБ

22

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

Обеспечение целостности данных

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

ния целостности называемые: целостностью сущностей и ссылочной целостностью.

Первое и второе правила имеют прямое отношения к порядку назначения первичного и внешних ключей.

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

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

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

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

Построение схемы данных средствами Microsoft Access

Вызовите схему данных (пункт меню “Сервис – Схема данных”) и добавьте в её обе наши таблицы. Удерживая в нажатом состоянии левую кнопку мышки, перетащите поле “Spec_ID” из таблицы “Spec” в таблицу “Students”. В появившемся окне “Изменение связей” включите опцию “Обеспечение целостности данных”. Связь с включенными условиями целостности данных обеспечивает соответствие каждого значения, которое вводится в

столбец внешнего ключа, существующему значению в связанном столбце первичного ключа. В результате наших действий между таблицами будет организована связь “один- ко-многим” (см. рис. 3.7).

Рисунок 3.7. – Схема данных БД

Ставропольский государственный университет, кафедра КБ

23

В нашем случае связь “один-ко-многим” означает, что одна специальность из таблицы “Spec” может соответствовать многим студентам. Рассмотрим рисунок 3.8. Теперь вместо ввода названия специальности в поле внешнего ключа списка студентов достаточно передать его ключ. Значение 1 соответствует специальности “Компьютерная безопасность”, 2

– “ОиТЗИ”.

Рисунок 3.8. – Таблицы с данными

Какие преимущества мы приобрели, вынеся повторяющиеся данные во внешнюю таблицу? Самое главное – значительная экономия памяти. Это утверждение доказывают элементарные расчёты. Сравним таблицу Students старой и новой версии. Одна запись старой таблицы занимала:

4 (Students_ID) + 15 (SurName) + 10 (FName) + 25 (SpCod) + 1 (YearNum) = 55 байт

Новая таблица избавилась от столбца SpCod, а вместо него приобрела поле внешнего ключа, занимающего всего на всего 4 байта. Таким образом одна строка новой таблицы уменьшилась почти вдвое и теперь составляет всего 26 байт. При заполнении таблицы маленькие байты складываются в сотни килобайт. Проверьте. В нашем университете учится около 15 тысяч студентов. По сравнению с таблицей Students старой версии мы выиграли 21 * 15 000 = 315 тыс. байт! Это очень много.

Мастер подстановок

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

Попробуем сделать список студентов более приветливым. Для этого откройте таблицу студентов в режиме конструктора. Выберите поле внешнего ключа Spec_ID. В нижней части окна откройте страничку “Подстановка”. На этой странице расположена всего одна строка “Тип элемента управления” – укажите в ней, что мы намерены работать с полем со списком. Сразу после этого действия на странице отобразятся дополнительные свойства поля (рис. 3.9).

Ставропольский государственный университет, кафедра КБ