Программирование >>  Руководство по sql 

1 ... 10 11 12 [ 13 ] 14 15 16 ... 105


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



1 ... 10 11 12 [ 13 ] 14 15 16 ... 105

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика