- •7.7.6. Определить общее количество поставщиков
- •7.7.7. Определить в поставках максимальное
- •7.7.8. Для каждой поставляемой детали указать номер и общий объем поставки в штуках
- •7.7.9. Указать номера всех типов деталей, поставляемых более чем одним поставщиком
- •7.7.10. Определить имена поставщиков детали с номером т2'
- •7.7.11. Определить имена поставщиков по крайней мере одной красной детали
- •7.7.12. Указать номера поставщиков, статус которых меньше текущего максимального статуса
- •7.7.13. Указать имена поставщиков детали с номером 'р2'
- •7.7.14. Выбрать имена поставщиков, которые не поставляют деталь с номером 'р2'
- •7.7.15. Определить имена поставщиков всех типов деталей
- •7.7.16. Определить номера деталей, которые либо весят более 16 фунтов, либо поставляются поставщиком с номером 's2', либо и то, и другое
- •7.8. Резюме
- •8.2. Ограничения типа
- •8.3. Ограничения атрибута
- •8.4. Ограничения переменной-отношения
- •8.5. Ограничения баз данных
- •8.6. "Золотое правило"
- •8.7. Ограничения состояния и ограничения перехода
- •8.8. Ключи
- •3. Пусть r1 и r2 — ссылающаяся и ссылочная переменные-отношения соответственно.
- •8.9. Средства языка sql
- •8.10. Резюме
- •9.1. Введение
- •9.2. Для чего нужны представления
- •9.3. Выборка данных из представлений
- •9.4. Обновление данных в представлениях
- •9.5. Моментальные снимки
- •9.6. Поддержка представлений в языке sql
- •9.7. Резюме
- •Часть III
- •10.1. Введение
- •10.2. Основные определения
- •10.3. Тривиальные и нетривиальные зависимости
- •10.4. Замыкание множества зависимостей
- •10.5. Замыкание множества атрибутов
- •10.6. Неприводимые множества зависимостей
- •10.7. Резюме
- •Глава 1 1
- •I Переменные-отношения в знф I
- •11.2. Декомпозиция без потерь
- •11.3. Первая, вторая и третья нормальные формы
- •11.4. Сохранение зависимостей
- •11.5. Нормальная форма Бойса-Кодда
- •11.6. Замечание по поводу атрибутов, содержащих в качестве значений отношения
- •11.7. Резюме
- •12.1. Введение
- •12.2. Многозначные зависимости и четвертая нормальная форма
- •12.3. Зависимости соединения и пятая нормальная форма
- •Соединение по комбинации атрибутов j#,s#
- •Исходное состояние spj
- •12.4. Общая схема процедуры нормализации
- •12.5. Денормализация
- •12.6. Ортогональное проектирование (небольшое отступление от темы)
- •12.7. Другие нормальные формы
- •12.8. Резюме
- •12.3. Brosda V., Vossen g. Update and Retrieval Through a Universal Schema Interface // acm tods. — December, 1988. — 13, № 4.
- •12.5. Date c.J. Will the Real Fourth Normal Form Please Stand Up? // c. J. Date and Hugh Darwen. Relational Database Writings 1989-1991.— Reading, Mass.: Addison-Wesley, 1992.
- •12.20.Kent w. The Universal Relation Revisited // acm tods. — December, 1983. — 8, № 4.
- •12.22.Maier d., Ullman j.D. Fragments of Relations // Proc. 1983 sigmod Intern. Conf. On Management of Data. — San Jose, Calif. — May, 1983.
- •12.24.Maier d., Ullman j.D. Maximal Objects and the Semantics of Universal Relation Databases // acm tods. — March, 1983. — 8, № 1.
- •Глава 13
- •13.1. Введение
- •13.2. Общий подход
- •Каждыи экземпляр сущности ности «Произведение"
- •13.3. Модель "сущность/связь"
- •13.5. Проектирование базы данных с помощью метода er-моделирования
- •13.6. Краткий анализ er-модели
- •13.7. Резюме
Глава 1 1
Дальнейшая нормализация: формы ШФ, 2НФ, ЗНФ и НФБК
11.1. Введение
До сих пор в этой книге в качестве примера рассматривалась база данных поставщиков и деталей с приведенной ниже логической структурой.
S { Si, SNAME, STATUS, CITY } PRIMARY KEY { Si }
P {Pi, PNAME, COLOR, WEIGHT, CITY } PRIMARY KEY { Pi }
SP { Si, Pi, QTY }
PRIMARY KEY { Si, Pi }
FOREIGN KEY { Si } REFERENCES S
FOREIGN KEY { Pi } REFERENCES P
Теперь структура этой базы данных стала нам понятней. Очевидно, что в ней присутствуют три переменные-отношения (S, Р и SP), в которых определены те или иные атрибуты. Например, атрибут CITY для города поставщика определен в переменной-отношении S, атрибут COLOR для цвета детали — в переменной-отношении Р, атрибут QTY для количества деталей — в переменной-отношении SP и т.д. Но откуда нам это известно? Кое-что можно понять, определенным образом изменив макет базы данных. Предположим, например, что атрибут CITY удален из переменной-отношения поставщиков S и добавлен в переменную-отношение поставок SP. (Однако интуитивно это действие можно охарактеризовать как ошибочное, поскольку понятие "город поставщика" очевидным образом связано с поставщиками, а не с поставками.) На рис. 11.1 представлен пример содержания переменной-отношения поставок, измененной подобным образом.
Замечание. Чтобы избежать путаницы, связанной с исходной переменной-отношением SP, которой мы оперировали ранее, эта измененная переменная-отношение будет далее обозначаться SCP, как и в главе 10.
На рис. 11.1 легко заметить один недостаток, свойственный организации переменной-отношения SCP, а именно — ее избыточность. Говоря конкретнее, в каждом кортеже переменной-отношения SCP для поставщика с номером 'S1' содержится информация о том, что этот поставщик находится в Лондоне; в каждом кортеже переменной-отношения SCP для по-
ставщика с номером ' S2' содержится информация о том, что этот поставщик находится в Париже, и т.д. Иначе говоря, сведения о городе, в котором находится конкретный поставщик, повторяются в отношении столько раз, сколько данный поставщик выполняет поставок. Эта избыточность, в свою очередь, приводит к некоторым проблемам. Например, после обновления данных в качестве местонахождения поставщика с номером 'S1' в одном из кортежей может быть указан Лондон, а в другом — Амстердам1. Таким образом, для создания хорошего макета следует придерживаться принципа "по одному факту в одном месте" (т.е. следует избегать избыточности данных). Предметом нормализации, в сущности, является всего лишь формализация подобных простых идей, однако это должна быть формализация, которая действительно будет иметь большое практическое значение при проектировании базы данных.
s# |
CITY |
P# |
QTY |
SI |
London |
PI |
300 |
SI |
London |
P2 |
200 |
SI |
London |
P3 |
400 |
SI |
London |
P4 |
200 |
SI |
London |
P5 |
100 |
SI |
London |
P6 |
100 |
S2 |
Paris |
PI |
300 |
S2 |
Paris |
P2 |
400 |
S3 |
Paris |
P2 |
200 |
S4 |
London |
P2 |
200 |
S4 |
London |
P4 |
300 |
S4 |
London |
P5 |
400 |
Рис. 11.1. Пример значений данных в переменной-отношении SCP
Конечно, как уже упоминалось в главе 5, отношения в реляционной модели всегда нормализованы. Можно сказать, что переменная-отношение также нормализована, поскольку ее допустимыми значениями являются нормализованные отношения. Следовательно, в контексте реляционной модели переменная-отношение также всегда нормализована. Аналогично можно сказать, что переменные-отношения (и отношения) всегда находятся в первой нормальной форме, или ШФ. Иначе говоря, понятия "нормализованная переменная-отношение" и "переменная-отношение в ШФ" означают в точности одно и то же, хотя следует иметь в виду, что понятие "нормализованная переменная-отношение" может также относиться к нормализации более высоких уровней (обычно для обозначения третьей нормальной формы, или ЗНФ). Последний вариант использования этого термина не совсем точен, но достаточно широко распространен.
Далее в этой и последующих главах нужно сделать (достаточно правдоподобное'.) предположение о том, что контроль предикатов переменных-отношений поддерживается не в полном объеме. Это необходимо, поскольку в противном случае описанные выше проблемы просто не могли бы возникнуть (было бы невозможно обновить данные о городе поставщика с номером 'S1' только в некоторых кортежах). В действительности нормализацию целесообразно понимать следующим образом: она помогает спроектировать базу данных таким образом, чтобы сделать более логически приемлемыми операции обновления отдельных кортежей, что в противном случае (т.е. когда макет базы данных не нормализован) может оказаться затруднительным. Эта цель достигается благодаря тому, что в полностью нормализованном макете предикаты переменных-отношений имеют более простой вид.
Однако некоторая переменная-отношение может быть нормализованной в указанном смысле и все еще обладать определенными нежелательными свойствами. Примером может служить переменная-отношение SCP, показанная на рис. 1.1. Принципы дальнейшей нормализации позволяют распознать подобные случаи и привести такие переменные-отношения к более приемлемой форме. В случае переменной-отношения SCP эти принципы позволили бы точно установить ее недостатки и указать на необходимость ее разбиения на две "более приемлемые" переменные-отношения: одну с заголовком {Si, CITY} и другую с заголовком {Si, Pi, QTY}.
Нормальные формы
Процесс дальнейшей нормализации, который ниже будет упоминаться просто как нормализация, основывается на концепции нормальных форм. Говорят, что переменная-отношение находится в определенной нормальной форме, если она удовлетворяет заданному набору условий. Например, переменная-отношение находится во второй нормальной форме (или в 2НФ) тогда и только тогда, когда она находится в 1НФ и удовлетворяет дополнительному условию, приведенному в разделе 11.3.
На рис. 11.2 показано несколько нормальных форм, которые определены к настоящему времени. Первые три (1НФ, 2НФ и ЗНФ) были определены Коддом (Codd) [10.4]. Как видно из рис. 11.2, все нормализованные переменные-отношения находятся в 1НФ, некоторые переменные-отношения в 1НФ также находятся в 2НФ и некоторые переменные-отношения в 2НФ также находятся в ЗНФ. Мотивом введения дополнительных определений было то, что вторая нормальная форма "более желательна" (в смысле, который будет разъяснен ниже), чем первая, а третья, в свою очередь, "более желательна", чем вторая. Таким образом, в общем случае при проектировании базы данных целесообразно использовать переменные-отношения в третьей нормальной форме, а не в первой или второй.
Переменные-отношения в 1НФ (нормализованные) Переменные-отношения в 2НФ