Программирование баз данных MS SQL Server (1084479), страница 74
Текст из файла (страница 74)
Требования к данным, находящимся в третьей нормальной форме, перечислены ниже. 63 Таблица должна соответствовать требованиям ко второй нормальной форме (как уже было сказано, переход от низших нормальных форм к высшим осуществляется строго последовательно). 63 Ни в одном столбце не должны проявляться какие-либо зависимости от другого неключевого столбца. Нормализация и другие важные проблемы проектирования 289 На первый взгляд лсожет показаться, что к этой катего|ти относится также аиолбгц Опл Г Рг1 се, и зто предположение действительно отчасти оп|заоди ваепия.
Безусловно, таб лица Ргос)о с Г э с данными о вава|так, кото|>ая будет создана для устфанения указанного не достатка, может и должна соде|тжоть столбец Оп1 С Ргз'. Се, но сами данные этого стаабца немного отличаюта~ от д|тугих данных. В дештюитагьности дела обстоят так, что было бы лучше тфисвоить этому спюлбцу имя Е з' э Гргг се Щена по пфейску|занту), поскольку цена на данный товаР должна оставаться неизменной, нагавиасио от того, в какой заказ включен указанный тога|7. Но включая в таблицу Огс)ег0е газ 1 в столбец Опг СРгз се (Цена за единицу тово|за) вместо столбца Езэсрг1ое, мьг оставляем за собой две воэможности. Во.пгфвых, могут бьопь п|гедложены скидки, с учетом кояпфых цена тога|за в манент тфодажи изменится. Это означаега что иена, указанная в соопветствуюкэей стфоке таблииы Огс)е г0е Г а 1 1 э, может отличаться от номинальной цены, указанной в таблице Рго с)п с Г и.
Воетсфых, цена, которую мы можем назначить за егягницу пюви|та, может изменяться со в|заменем под действиан таких фактгфов, как инфляция, но будущие изменения цен не должны влиять на то, какие цены были включены в заказы, фактически выполненные в прошлом. Иными агавами, иена — это одна из тех ха|гакяиутистик товара, копкфая в дсйсспгвительности имеет два аспекта поскольку она зависит гг от намфа детали, Рэ г т Ио, и от пфвичн ого ключа табгицы Огс)ег0еса11з (иначе гово|зя, от значений Огг)егЕ0 и Ез не ЕГет). Прежде всего необходимо создать новую таблицу (назовем ее ргоацсгэ), предназначенную для хранения информации о деталях (в данном случае предметом торговли, т.е. товаром являются детали).
В этой новой таблице будет храниться та информация, содержавшаяся в таблице Огдег0ега11э, которая в большей степени зависит от значений в столбце Рагс))о, чем от значений в столбце Огс)ег10 или ЫпеЕгепг (табл. 8.7). Таблица 8.7. Таблица ргос)пока пеяохареаоп ие рахено (рк) 1А4536 ОН2400 Р1апде 1пзесгог ОН2403 415436 1пЗеспос нега ЗХ9567 909200 Рпнр Рап 6С5437 ЗН6250 Рап Сопгго1 ЗЕ9200 2Р5523 Рап Нопз1пд Рояр ЗХ9567 Уже известно, что таблицы в рассматриваемом примере находятся во второй нормальной форме, поэтому рассмотрим, насколько они соответствуют двум другим требованиям.
Вначале попытаемся выяснить, есть ли какие-либо столбцы, зависящие от столбца, отличного от столбца первичного ключа. Ответ на этот вопрос является положительным. Фактически в таблице Огаег0ега11э имеется целый ряд столбцов, которые зависят от столбца рагс)40 не меньше, а, возможно, даже больше, чем от столбца первичного ключа рассматриваемой таблицы. В частности, от столбца Раггно полностью зависят столбцы ие-' д)гг (Вес) и Оеэсггргйоп (Описание), поэтому необходимо снова выполнить разбиение одной таблицы на две.
290 Глава 8 После этого мы получаем возможность изъять из таблицы Ог44егоега118 все указанные столбцы, кроме столбца внешнего ключа Рагсно (табл. 8.8). Таблица 8.8. Таблица ок44екоесаа1е Океекио Ьвпетьма Раксэго Яку ПпЗЕРкаее тоеа1Рквсе 100 100 184536 082400 082403 415436 ЗХ9567 809200 805437 386250 809200 285523 ЗХ9567 15 27 108 29 750 62.50 12 116 100 750 62.50 84 15 100 101 102 102 15 102 103 103 32 32 480 165 42 40 1 12 165 103 :. Б: настоящей книге автор иногда сознательно идет нв нарушение требований нормали' , зации',:причем чаще, всего такив' нарушения допускаются применительно к', производным данным. 'Это связано'о тем,' что применение пройэводнйх данных позволяет, существенно , повысить быстродействие.
)чапримеР запрос с условием.интйк тойэ1Рсаре > 8100 вы» ' полняется намного быстрее'пах сравнению с запросом;-содержащим"условие 'ИйзЯК Оау: .".'Вп18Ргзсе > 56, особенно если имеется возможность создать.индекс на вычисленном столбцечсоса1Рх1ае. ',но,:с другой стороны, автор иногда применяет скорее гибриднйй 'псфкод, в котором,ис-- ,.пользуется вычисленный столбец;. в 'сумма'значвйий двух других столбцов поддерживает ' ' ся в актуальном сострбнии с гюмощыо' суБД 808 Яегпкег, [напбмним,,что именно,зта идея ' 'реализована в главе б в примеречиспользсванйя столбца Ртси1оцэза1айу в'таблице; :-Кир1оуееа базы данных: лйсочпб1по); Боли какой*то столбец становится очень, важным с точки зрения производительности (например, если. критерии, а которых учитйвзсются зна- ' чения.из этого столбца, 'применяются' во многих запросах)'; томожет потребоваться 881 ' .дать йндекс на этом, новом вычисленном столбце, Важность индекса, состоит,.в том; что ': е нем"материализуются",ейчисленныа"данные, а ато 'означает„,что 'для субд БО1 Бе4чег исключается йеобкодимость рассчитывать'зйачвния в вычисленйом столбце дийамически,, ' -Вместо етого значенйе вычисляется только единожды, при сокранении данных о строке в индексе,' а'в двльнейщем 'используется заранее вычисленное значение столбца.
Такая ' ' организация работы позволяет,:дейсшительно'добиться очень"высокого быстродействия;. дополнительная информация по этой теме приведена в главе 8. В результате этого устраняется первый недостаток, препятствующий созданию третьей нормальной формы (зависимость между столбцами), но остается также необходимость исключить производные данные. В этом случае таблица Ог44егоега118 содержит столбец Тока1Рг1се, данные которого фактически могут быть получены путем перемножения значений, взятых из столбцов Яку О01СРг1се. Наличие подобных столбцов полностью противоречит требованиям нормализации. Нормализация и другие важные проблемы проектирования 291 Итак, чтобы выполнить все требования к созданию третьей нормальной формы, достаточно удалить столбец тоса1Рггсе и в дальнейшем вычислять значения общей стоимости по мере необходимости.
Прочие нормальные формы Кроме первых трех нормальных форм, разработаны еще три перечисленные ниже нормальные формы, которые рассматриваются в теоретических исследованиях как часть модели нормализации. П Нормальная форма Бойса-Кодда (Воусе-Сос(с(). Фактически эта нормальная форма считается разновидностью третьей нормальной формы.
Она относится к той ситуации, в которой имеется несколько перекрывающихся потенциальных ключей. Такая ситуация может возникать только при следующих условиях: а) все потенциальные ключи являются составными ключами (иными словами, для создания ключа требуется больше одного столбца); б) количество потенциальных ключей больше одного; в) каждый потенциальный ключ имеет по меньшей мере один общий столбец с другим потенциальным ключом. Обычно для нормализации таблиц, имеющих указанные особенности, может применяться несколько разных способов, но на практике такая ситуация возникает крайне редко. П Четвертая нормальная форма.
Эта нормальная форма предназначена для устранения проблем, связанных с наличием многозначной зависимости. Многозначная зависимость возникает в такой ситуации, в которой ни один столбец в таблице не зависит от столбца, отличного от столбца первичного ключа, и все столбцы зависят от всего первичного ключа (т.е. таблица находится в третьей нормальной форме). Тем не менее при некотором довольно редком стечении обстоятельств может обнаруживаться отдельная зависимость одного из столбцов первичного ключа от других столбцов первичного ключа. Такая ситуация встречается редко и обычно не становится причиной каких- либо значительных проблем. Поэтому специалисты по базам данных чаще всего игнорируют возможность применения четвертой нормальной формы, и она не рассматривается в настоящей книге.
Пятая нормальная форма. Определение этой нормальной формы касается вариантов проведения декомпозиции таблицы с потерями и без потерь. Дело в том, что иногда возникает необходимость разбить одну таблицу на несколько других таблиц, но при этом может сложиться такая ситуация, что по данным производных таблиц невозможно будет полностью восстановить данные исходной таблицы. Как и в случае других нормальных форм высокого порядка, ситуации, в которых может потребоваться применение пятой нормальной формы, встречаются редко, поэтому в настоящей книге эта нормальная форма больше не рассматривается.
Безусловно, приведенное выше описание нормальных форм высокого порядка сделано очень кратким, но автор принял решение об этом вполне осознанно. Дело в том, что в действительности эти формы приходится применять чрезвычайно редко, хотя н нужно иметь о них определенное представление. 292 Глава 8 Связи Хотя связи между объектами, возникающие в реальной жизни, намного глубже и разностороннее по сравнению со связями между таблицами базы данных, изучение аналогий между теми и другими позволяет лучше разобраться в предмете. В частности, по утверждению специалистов, ключом к успешному созданию связи является понимание того, какие роли играют оба участника связи, а также соблюдение допустимого регламента и правил поддержки связи.