
- •2. Реляционная модель данных
- •2.1. Определения и понятия
- •2.2. Первичные ключи и индексы
- •2.3. Реляционные отношения между таблицами
- •2.3.1. Отношение один-ко-многим
- •2.3.2. Отношение один-к-одному
- •2.3.3. Отношение многие-ко-многим
- •2.3.4. Связи между записями одной таблицы
- •2.4. Ссылочная целостность
- •2.5. Индексы
- •Упражнения и задачи
- •3. Нормализация отношений
- •3.1. Первая нормальная форма
- •3.2. Функциональные зависимости и детерминанты
- •3.3. Вторая нормальная форма
- •3.4. Третья нормальная форма
- •3.5. Нормальная форма Бойса-Кодда (нфбк)
- •3.6. Нормализация за и против
- •Контрольные вопросы
- •Упражнения и задачи
- •4. Операции с данными в реляционной модели
- •4.1. Объединение
- •4.2. Пересечение
- •4.3. Вычитание
- •4.4. Декартово произведение
- •4.5. Выбор
- •4.6. Проекция
- •4.7. Соединение
- •4.8. Деление
- •Упражнения и задачи
- •5. Запросы к бд
- •5.1. Простые запросы
- •5.2. Многотабличные запросы
- •5.3. Подзапросы
- •6. Сетевая модель данных
- •6.1. Исторический контекст
- •6.2. Основные понятия и определения
- •Торговый-агент
- •Строка-элемент
- •6.3. Преимущества и недостатки сетевых моделей
- •Упражнения и задачи
- •7. Иерархическая модель данных
- •7.1. Основные понятия и определения
- •7.2. Преимущества и недостатки иерархических моделей
- •Упражнения и задачи
- •Часть 2. Управление окружением базы данных
- •1. Администрирование баз данных
- •1.1. Функции абд
- •1.1.1. Работа с пользователями
- •1.1.2. Установление стандартов и процедур
- •1.2. Задачи абд
- •2. Защита базы данных
- •2.1. Идентификация пользователя
- •2.2. Проверка полномочий и представления данных
- •2.3. Шифровка
- •Метод поалфавитной подстановки
- •2.4. Секретность данных
- •4. Целостность данных
- •4.1. Контроль типов
- •4.2. Контроль изменений
- •4.3. Целостность на уровне ссылок
- •5. Параллельная работа с бд
- •5.1. Обработка транзакций
- •5.2. Параллельная работа с бд
- •Литература
2.3.2. Отношение один-к-одному
Отношение один-к-одному имеет место, когда одной записи в родительской таблице соответствует одна запись в дочерней таблице (рис. 2.4.).
Таблица «Сотрудники» Таблица «Информация
о сотрудниках»
Рис. 2.4 Связь один-к-одному.
Данное отношение встречается много реже, чем отношение один-ко-многим. Его используют, если не хотят, чтобы таблица БД «распухала» от второстепенной информации. Связь один-к-одному приводит к тому, что для чтения связанной информации в нескольких таблицах приходится производить несколько операций чтения, что замедляет получение нужной информации. Кроме того, базы данных, в состав которых входят таблицы со связью один-к-одному, не могут считаться полностью нормализованными (о нормализации см. ниже).
Подобно связи один-ко-многим, связь один-к-одному может быть жесткой и нежесткой.
2.3.3. Отношение многие-ко-многим
На рис. 2.5 показаны таблицы, состоящие в отношении многие-ко-многим. Каждой учебной группе соответствует несколько преподавателей. Каждый преподаватель может вести, во-первых, несколько разных предметов и, во-вторых, преподавать в разных группах.
Таблица «Учебные группы Таблица
и дисциплины» «Преподаватели»
Рис. 2.5. Связь многие-ко-многим
Некоторые СУБД не поддерживают связи многие-ко-многим на уровне индексов и ссылочной целостности (см. следующий подраздел), хотя и позволяют реализовывать ее в таблицах неявным образом. Считается, что БД всегда можно перестроить так, чтобы любая связь многие-ко-многим была заменена на одну или более связей один-ко-многим.
2.3.4. Связи между записями одной таблицы
Между записями одной таблицы также могут существовать связи, то есть одни записи могут ссылаться на другие.
Пусть в реляционной БД необходимо хранить древовидную структуру произвольного уровня, например, структуру организации (рис. 2.6).
Департамент автоматизации, Техническое управление,
Отдел сетевого оборудования, Ремонтный отдел АТС,
Управление программными системами, Отдел эксплуатации,
Информационная группа, Административная группа,
Диспетчерское бюро, Отдел разработки
Рис. 2.6. Структура организации
В этом случае можно создать таблицу (рис. 2.7), в которой каждому подразделению организации соответствует одна запись. Эта запись ссылается на запись, соответствующую подразделению более высокого уровня, в которое входит данное подразделение. И только в записи о подразделении самого высокого уровня нет подобной ссылки.
№ подразделения |
Название подразделения
|
№ подразделения предыдущего уровня
|
1 |
Департамент автоматизации |
|
2 |
Техническое управление |
1 |
3 |
Управление разработки и эксплуатации программных систем |
1
|
4 |
Отдел сетевого оборудования |
2 |
5 |
Ремонтный отдел |
2 |
6 |
АТС |
2 |
7 |
Отдел эксплуатации |
3 |
8 |
Отдел разработки |
3 |
9 |
Информационная группа |
7 |
10 |
Административная группа |
7 |
11 |
Диспетчерское бюро |
10 |
Рис. 2.7. Табличное представление структуры организации