
- •Введение
- •Содержание
- •1. Файловые системы
- •История развития
- •Файловые системы, принципы построения
- •Работа с типизированным файлом
- •Недостатки файловых систем
- •Задание
- •Реляционная таблица
- •Определение домена
- •Создание таблиц в среде Microsoft Access
- •Задание
- •Реляционные ключи
- •Связь между таблицами
- •Обеспечение целостности данных
- •Построение схемы данных средствами Microsoft Access
- •Мастер подстановок
- •Задание
- •Концепция ER-модели
- •Задание
- •Первая нормальная форма (1NF)
- •Вторая нормальная форма (2NF)
- •Третья нормальная форма (3NF)
- •Нормальная форма Бойса-Кодда (BCNF)
- •Четвёртая нормальная форма (4NF)
- •Пятая нормальная форма (5NF)
- •Задание
- •Выборка значений из таблиц – SELECT
- •Порядок сортировки – ORDER BY
- •Ограничение набора данных – WHERE
- •Предикат существования EXISTS
- •Агрегатные функции
- •Группировка данных – Group By
- •Псевдонимы столбцов
- •Псевдонимы таблиц
- •Объединение нескольких таблиц
- •Построение запросов в среде Microsoft Access
- •Задание
- •Вставка новой записи – INSERT
- •Редактирование данных – UPDATE
- •Удаление записей – DELETE
- •Задание
- •Основные типы данных SQL-92
- •Язык определения данных – DDL
- •Задание
- •Подготовка отчёта в среде Access
- •Задание
- •3-х уровневая архитектура ANSI-SPARC
- •Создание форм для ввода данных в Microsoft Access
- •Задание
- •Строка соединения ADO
- •Соединение с хранилищем данных, компонент TADOConnection
- •Установка соединения
- •Пример соединения без регистрации пользователя
- •Информирование о БД
- •Задание
- •Базовый класс доступа к данным TDataSet
- •Открытие и закрытие набора данных
- •Обновление набора данных
- •Перемещение по набору данных
- •Создание закладок и переход к закладке
- •Редактирование записей в наборе
- •Фильтрация набора данных
- •Организация поиска данных
- •Взаимодействие с элементами управления данными
- •Задание
- •Поле таблицы – класс TField
- •Классификация полей по функциональному назначению
- •Классификация полей по типу обслуживаемых данных
- •Обращение к отдельному объекту-полю
- •Задание
- •Поля подстановки
- •Вычисляемые поля
- •Организация отношения главная-подчинённая таблица
- •Задание
- •Поля BLOB
- •Задание
- •Источник данных – компонент TDataSource
- •Общие черты компонентов отображения данных
- •Сетка базы данных – компонент TDBGrid
- •Статический текст – компонент TDBText
- •Строка ввода БД – компонент TDBEdit
- •Многострочный текстовый редактор БД – TDBMemo
- •Изображение БД – компонент TDBImage
- •Список БД – TDBListBox
- •Комбинированный список БД – TDBComboBox
- •Флажок БД – TDBCheckBox
- •Радиогруппа БД – TDBRadioGroup
- •Компонент – TDBCtrlGrid
- •Навигатор – TDBNavigator
- •Задание
- •Создание базы данных
- •Удаление базы данных
- •Создание таблиц
- •Пример создания таблиц средствами Transact SQL
- •Создание представлений
- •Задание
- •Определение и использование переменных
- •Операторы управления Transact-SQL
- •Базовые функции Transact-SQL
- •Хранимые процедуры
- •Триггеры
- •Задание
- •Запрос TADOQuery
- •Хранимая процедура TADOStoredProc
- •Транзакции и их изоляция
- •Управление транзакциями и компонент TADOConnection
- •Задание
- •Построение простейшего документа XML
- •Атрибуты
- •Определение документа DTD
- •Задание

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).
Ставропольский государственный университет, кафедра КБ