|
Программирование >> Руководство по sql
pet au id Rover 998-72-3567 Spot 409-56-7008 Valiant 213-46-8915 Fluffy 213-46-8915 Sam 213-46-8915 Пятая нормальная форма доводит весь процесс нормализации до логического конца, разбивая таблицы на минимально возможные части для устранения в них всей избыточности данных. Нормализованные таким образом таблицы обычно содержат минимальное количество информации, помимо первичного ключа. Например: titles table title id title authors table au id au lname au fname authors&titles table au id title id prices table title id price advances table title id advance pets table pet au id Преимуществом преобразования базы данных в пятую нормальную форму является возможность управления целостностью. Поскольку при этом любой фрагмент неключевых данных (данных, не являющихся первичным или внещним ключом) встречается в базе данных только один раз, не возникает никаких проблем при их обновлении. Если, например, изменяется стоимость книги, соответствующие поправки нужно внести только в таблицу prices и не надо просматривать остальные таблицы на предмет поиска и изменения в них значения соответствующего поля price. Однако, поскольку каждая таблица в пятой нормальной форме имеет минимальное число столбцов, вы должны дублировать в них одни и те же ключи, обеспечивая возможности для объединения таблиц и получения полезной информации. Изменение значения единственного ключа (например, titlejd) уже является очень серьезной проблемой. Вы должны найти все вхождения этого значения в ващей базе данных и внести соответствующие изменения. К счастью, столбцы первичных ключей обычно изменяются значительно реже, чем неключевые. Мораль сей басни такова: нужно добиваться равновесия между избыточностью данных и избыточностью ключей. ОБЗОР БАЗЫ ДАННЫХ Давайте вспомним процесс создания базы данных bookbiz. Мы начали с четырех таблиц: authors, titles, publishers и editors. Их создание было интуитивно ясно, к тому же, в соответствии с объектным подходом, независимые объекты должны представляться отдельными базовыми таблицами. Кроме того, в результате моделирования зависимостей между объектами мы построили еще две базовые таблицы - одну для связи таблиц titles и authors {titleauthors), другую - для связи таблиц titles и editors {titleditors). Позднее мы добавили таблицы sales и salesdetails. К этому моменту мы не рассмотрели единственную таблицу - roysched, которая определяет авторские гонорары в виде зависимости от количества проданных книг. Таблица roysched является поисковой таблицей (lookup table), используемой исключительно для справочных целей. Ее данные модифицируются только в случае изменений условий контракта или выхода новой книги. Таким образом, мы создали девять таблиц. Перед тем как углубиться в детали базы данных bookbiz, давайте рассмотрим диаграмму с конечной структурой данных (рис. 2.13). Каждый прямоугольник на диафамме представляет таблицу и содержит в себе название таблицы и названия полей. Линии между прямоугольниками представляют связи между таблицами, указывая на возможные объединения (возможны и другие объединения, на диафамме показаны только запланированные нами объединения). Символы ] и N на концах линии между таблицами titles и publishers описывают тип отношения между этими таблицами - один-ко-многим. Издатель может выпустить несколько книг, но каждая книга может иметь только одного издателя. Последние замечания о базе данных bookbiz Чтобы лучше усвоить материал, на котором будет посфоено большинство следующих примеров Практического руководства по SQL, давайте более внимательно рассмофим девять таблиц базы данных bookbiz. База данных bookbiz содержит информацию о деятельности фех филиалов издательской компании, и так как они не являются независимыми, то используют одну и ту же базу данных. Таблица publishers содержит информацию о фех издательствах: их идентификационные номера, названия и адреса. Информация о каждом авторе, имеющем контракт с издателем, содержится в таблице authors: номер карточки социального сфахования, имя, фамилия и адресные данные. Аналогичную информацию о каждом редакторе содержит и таблица editors. Кроме того, в ней имеется дополнительный столбец, описывающий вид выполняемой редактором работы (подбор информации или управление всем проектом). По всем вышедшим и готовящимся к печати книгам таблица titles содержит следующую информацию: идентификационный номер, название, тема, идентификационный номер издателя, стоимость, расходы, количество проданных экземпляров, состояние конфакта, дополнительные заметки и дата выхода. Числа в столбце ytd sales должны изменяться по мере увеличения количества проданных книг одним из следующих способов. С помощью команд модификации данных. Из приложений, которые будут автоматически изменять значения в столбце ytd sales, как только будут вводиться новые данные в таблицу salesdetails. Используя SQL для определения триггеров, выполняющих автоматическое обновление. (Триггеры, не поддерживаемые стандартом ISO-ANSI 1992 года, входят как расширения во многие системы управления реляционными базами данных. Подробнее об этом вы узнаете в главе 10.) Книги и авторы представлены в разных таблицах, но могут быть связаны с помощью фетьей таблицы - titleauthors. Для каждой книги таблица titleauthors содержит строку с описанием идентификатора книги, идентификатора автора, позиции автора в списке авторов книги и информацию по разделению гонорара. Таблица titleditors аналогично связывает книги с их редакторами. Кроме того, она описывает порядок редактирования, т.е. можно узнать, кто был первым или последним редактором. Таблица roysched описывает зависимость между количеством проданных книг и размером авторского гонорара. Гонорар составляет определенную часть суммы, полученной за проданные книги. ш ш ш S (О О) U TITLEAUTHORS auJd titlejd au ord royaltyper fitte.id titlejd au.id PUBLISHERS pubJd pub name address city state pubJd pubJd titlejd 1 au id AUTHORS auJd aujname au fname phone address city state TITLES titlejd title type pubJd price advance ytd sales contract notes pubdate titlejd n SALESDETAILS sonum qty ordered qty shipped titlejd date shipped titlejd titlejd I ROYSCHED titlejd lorange hirange royalty title id title id TITLEDITORS edJd titlejd edord EDITORS edJd edjname edjname ed pos phone address city stale Puc. 2.13. База данных bookbiz
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |