|
Программирование >> Хронологические базы данных
Итак, ниже дается предварительное определение ЗНФ. Третья нормальная форма (очень неформальное определение). Переменная-отношение находится,в ЗНФ тогда и только тогда, когда ее неключевые атрибуты (если они вообще есть) являются: а) взаимно независимыми; б) неприводимо зависимыми от первичного ключа. Понятия неключевые атрибуты и взаимно независимые атрибуты поясняются ниже. Неключевой атрибут - это атрибут, который не входит в состав первичного ключа рассматриваемой переменной-отношения. Два или более атрибутов называются взаимно независимыми, если ни один из них функционально не зависит от какой-либо комбинации остальных атрибутов. Подобная независимость подразумевает, что каждый такой атрибут может обновляться независимо от значений остальных атрибутов. Например, согласно приведенному ниже определению переменная-отношение Р (переменная-отношение деталей) находится в ЗНФ, а именно: атрибуты PNAME (название детали), COLOR (цвет), WEIGHT (вес) и CITY (город) независимы (т.е. цвета деталей можно менять, не изменяя их вес и т.д.) и неприводимо зависимы по отношению к первичному ключу {Р} (номер детали). Такое неформальное определение ЗНФ может быть интерпретировано следуюшим, еше более неформальным образом. Третья нормальная форма (еще более нефор.мальное определение). Переменная-отношение находится в ЗНФ тогда и только тогда, когда каждый кортеж состоит из значения первичного ключа, идентифицирующего некоторую сущность, и набора из нуля или более взаимно независимых атрибутов, некоторым образом описывающих эту сущность. К переменной-отношению Р применимо и это определение, поскольку каждый кортеж переменной-отношения Р состоит из значения первичного ключа (номер детали), идентифицирующего некоторую деталь в реальном мире, и четырех дополнительных взаимно независимых значений (название, цвет, вес детали и город, в котором она находится), описывающих отдельные свойства детали. Теперь можно вернуться к описанию процедуры нормализации и дать определение первой нормальной формы. Первая нормальная форма. Переменная-отношение находится в 1НФ тогда и только тогда, когда в любом допустимом значении этой переменной-отношения каждый ее кортеж содержит только одно значение для каждого из атрибутов. Фактически в этом определении всего лишь утверждается, что все переменные-отношения всегда находятся в 1НФ, что, несомненно, верно. Однако переменная-отношение, которая находится только в 1НФ (т.е. не находится ни во второй, ни в третьей нормальной форме), обладает структурой, не совсем желательной по некоторым причинам. Для иллюстрации этого факта допустим, что информация о поставщиках и поставках содержится не в двух переменных-отношениях S и SP, а в одной, имеющей следующую структуру. FIRST { St, STATUS, CITY, Pt, QTY } PRIMARY KEY { St, Pt } Это расширенная версия переменной-отношения SCP, приведенной выше, в разделе 11.1. Ее атрибуты имеют тот же смысл, что и ранее, за исключением следующего дополнительного Офаничения, специально введенного в этом примере. CITY -> STATUS (Иными словами, атрибут STATUS функционально зависим от атрибута CITY; и смысл этого Офаничения состоит в том, что статус поставщика определяется его местонахождением, например все поставщики из Лондона должны иметь статус 20.) Кроме того, для упрощения атрибут SNAME далее будет игнорироваться. Первичным ключом переменной-отношения FIRST является комбинация атрибутов {St, Pt}, а диафамма ее функциональных зависимостей будет иметь вид, представленный на рис. 11.5. Обратите внимание, что эта диаграмма функциональных зависимостей сложнее аналогичной диаграммы для переменной-отношения в ЗНФ. Как было сказано в предыдущем разделе, на диаграмме ФЗ для переменной-отношения в ЗНФ стрелки всегда выходят только из потенциальных ключей, тогда как на диаграмме ФЗ для переменной-отношения, которая не находится в ЗНФ (например, на диаграмме ФЗ для переменной-отношения FIRST), есть стрелки, начинающиеся с потен- CITY STATUS Рис 115 Функциональные зависимости в переменной-отношении FIRST циальных ключей, и дополнительные стрелки, усложняющие всю картину. Фактически в переменной-отношении FIRST нарушаются оба условия, указанные в приведенном выше определении ЗНФ. не все неключевые атрибуты взаимно независимы, поскольку атрибут STATUS зависит от атрибута CITY (одна дополнительная стрелка), и не все неключевые атрибуты неприводимо зависимы от первичного ключа, поскольку атрибуты STATUS и CITY, каждый в отдельности, зависимы от атрибута St (еще две дополнительные стрелки). Для иллюстрации некоторых трудностей, порождаемых этими дополнительными стрелками, на рис. 11.6 приведен пример данных в переменной-отношении FIRST. Это тот же набор значений, который обычно используется нами в примерах, но значение 30 статуса поставщика с номером S3 заменено значением 10 в соответствии с новым ограничением, согласно которому значение атрибута CITY определяет значение атрибута STATUS. Возникшая в результате избыточность данных вполне очевидна, поскольку в каждом кортеже для поставщика с номером S1 атрибут CITY имеет значение London и, кроме того, в каждом кортеже со значением London в атрибуте CITY указано значение 20 для атрибута STATUS. Избыточность в переменной-отношении FIRST приводит к разным аномалиям обновления, получившим такое название по историческим причинам. Под этим понимаются определенные трудности, появляющиеся при выполнении операций обновления INSERT, DELETE и UPDATE. Для начала рассмотрим избыточность вида поставщик-город , соответствующую функциональной зависимости SI -> CITY. Ниже поясняются проблемы, которые возникнут при выполнении каждой из указанных операций обновления. FIRST
Puc. 11.6. Пример данных в переменной-отношении FIRST Операция INSERT. Нельзя поместить в переменную-отнощение FIRST информацию о том, что некоторый поставщик находится в определенном городе, не указав сведения хотя бы об одной детали, поставляемой этим поставщиком. Действительно, в таблице на рис. 11.6 нет сведений о поставщике с номером S5 из Афин, поскольку до тех пор, пока этот поставщик не начнет поставку какой-либо детали, для него невозможно будет сформировать значение первичного ключа. (Как и в разделе 9.4, в этой главе предполагается (достаточно обоснованно), что атрибуты первичных ключей не могут иметь значений, принимаемых по умолчанию.) Операция DELETE. Если из переменной-отнощения FIRST удалить кортеж, который является единственным для некоторого поставщика, будет удалена не только информация о поставке поставщиком некоторой детали, но также информация о том, что этот поставщик находится в определенном городе. Например, если из переменной-отнощения FIRST удалить кортеж со значением S3 в атрибуте St и значением Р2 в атрибуте Pt, будет утрачена информация о том, что поставщик с номером S3 находится в Париже. (По сути, проблемы удаления и вставки являют собой две стороны одной медали.) Замечание. В действительности проблема заключается в том, что в переменной-отнощении FIRST содержится слишком много собранной в одном месте информации, поэтому при удалении некоторого кортежа теряется слишком много информации. Точнее говоря, переменная-отнощение FIRST одновременно содержит информацию и о поставках, и о поставщиках. В результате удаление информации о поставке вызывает также удаление информации о поставщике. Для решения этой проблемы необходимо разделить информацию на несколько частей, т.е. собрать сведения о поставках в одной переменной-отношении, а о поставщиках - в другой (именно это и будет сделано чуть ниже). Следователь-
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки. |