- •Курс за третий семестр. Введение в субд. Базы данных как аппарат моделирования.
- •Базы данных
- •Классификация бинарных отношений
- •Реляционные базы данных
- •Сжатие избыточной информации
- •Нормализация баз данных
- •Моделирование бд. Нарушение целостности
- •К эволюции сетевых бд (этапы)
- •Определение бд в рамках архитектуры «клиент-сервер»
- •Язык sql (Structured Query Language)
- •Структура sql
- •Ограничение ссылочной целостности
- •Команды dml
- •Предикаты в sql
- •Выборка из нескольких таблиц
- •Опции group by и having Группировка и групповые вычисления
- •Опции order by и union
- •Предикаты, использующие выборку Вложенные подзапросы
- •Создание представлений
- •Проблемы модификации представлений
- •Проблема исчезающих значений
- •Транзакции
- •Примеры транзакций
Сжатие избыточной информации
Какую структуру БД считать оптимальной?
Несмотря на серьёзные сложности теоретического и практического свойства, руководящей идеей служит следующий основной принцип: «Не дублируй информацию!» (за очевидным исключением значений ключей). Каждая единица информации должна храниться в одном и только одном месте. Значения, которые могут быть вычислены – не информация, и не должны храниться вообще.
Кроме очевидной цели компактного хранения, недопустимость дублирования вызвана причинами сложности доступа и модификации данных. При наличии дублирования коррекция одного значения неизбежно влечёт необходимость коррекции второго значения, а для этого, как минимум, надо помнить, где оно находится.
Вернёмся к примеру с жителями… При ожидаемом реальном наличии большого числа пересечений в записях таблицы «Дома»…
Код дома |
Номер |
Улица |
Город |
|
|
|
|
Естественно разложить эту таблицу на несколько. Например, завести справочные таблицы «Улицы» и «Города» и добавить в таблицу «Люди» ссылки: код улицы, код города и поле «номер дома».
Улицы Города
Код |
Название |
|
|
|
|
|
|
|
|
|
Код |
Название |
|
|
города
люди
Другой вариант: добавить в таблицу «Улицы» ссылку на код города, в котором она находится и добавить в таблицу «Люди» коды улицы и дома.
Какой из вариантов выбрать и выбирать ли их вообще? Это зависит от реальной предметной области. Если в реальности каждый человек живёт в собственном доме и количество людей, живущих в одном доме и на одной улице невелико.
В среднем, конечно, такое дублирование достаточно велико и требуется выбрать вариант, для которого число записей-потомков, приходящихся на одну материнскую, в среднем, достаточно велико (большой коэффициент сжатия).
Что мы делали с формальной точки зрения? Главной операцией реляционной теории (алгебры) является операция соединения (join) таблиц, или композиции отношений.
Соединением двух таблиц PT и CT по ключам PK и FK соответственно будет таблица.
PTX1…Xn
CTY1…Ym
IX1…XnY1…Ym :
{<X1…Xn, Y1…Ym>, <X1…Xn>PT, <Y1…Ym>CT, FK=PK}
Пример соединения таблиц «Люди» и «Дома» по ключу «Код города» - таблица с полной информацией о людях и их адресах.
Таким образом мы определили декомпозицию отношений, то есть разбиваем таблицы, содержащие дублируемую информацию на пары таблиц с сохранением информации. А именно, осуществляем декомпозицию (во-первых, с сохранением логики, во-вторых, с возможно большим коэффициентом сжатия). Наш совет слишком общий для практического применения. Какова стратегия декомпозиции?