Программирование баз данных MS SQL Server (1084479), страница 71
Текст из файла (страница 71)
Кроме вопросов нормализации, в этой главе рассматриваются основные характеристики баз данных ОЕТР и О1.АР. Следует отметить, что в нормализованной базе данных ограничения имеют свою специфику, поэтому в завершение главы будет приведен ряд примеров применения таких ограничений. 278 Глава 8 По-видимому, настоящая глава является наиболее сложит! для понимания по сравнению со всеми другими главами книги, поскольку п(зи описании представленных в нгег теи пРиходится сталкиваться с противо)гением. Дело в том, что некоторые кониепглии, используемые в этой главе, относятся к тематике, кото)зоя будет йассчатривотьсп позже, такой как тригге)зы и хранимые пузокедурьс С другой спо)юньь к изучению указанных тем сложно пе)зейти, не досгпигнув понимания того, какую Раль они иг)зают в п)зоектифовании базы данных.
Авто)з настоятельно рекозмндует после п(зачтения данной главы еще фаз ве)гнуться к ней позже, усвоив мате)знал нескольких последующих глав. Таблицы Прежде всего необходимо рассмотреть формальное определение понятия таблицы, поскольку таблица — это наиболее важный объект любой базы данных. Таблица — это коллекция экземпляров данных, имеющих несколько общих атрибутов и сгруппированных по строкам и столбцам. Еще одна трактовка понятия таблицы состоит в том, что таблица представляет собой совокупность практически значимых данных (такие объекты данных именуются сущностями), которые объединены связями с информацией, находящейся в других таблицах.
Изображение различных сущностей (экземпляров данных) и связей (родительско-дочерних зависимостей между экземплярами данных) обычно называют диаграммами "сущность-связь" (или ЕК-диаграммами). Иногда вместо термина "ЕК-диаграмма" применяется сокращенное обозначение ЕВ0 (ЕК ИаВгаш). Связи позволяют переходить от одной таблицы к другой и формировать новые (обычно временные) таблицы из двух или нескольких таблиц, соединенных связями (некоторые сведения по этой теме уже были приведены в главах 4 и 5). А вся коллекция взаимосвязанных сущностей рассматривается как база данных.
Нормализация данных Нормализация представляет собой основу проектирования современных баз данных ОЕТР. Понятие нормализации было сформулировано на основе определения реляционной базы данных. Оба эти понятия были впервые предложены в 19б9 году в статье Э.Ф. Кодда (Е.Е Сос(б), сотрудника компании 1ВМ. Кодд сформулировал определение базы данных как объекта, "состоящего из совокупности неупорядоченных таблиц, к которым могут применяться непроцедурные операции, возвращающие таблицы". Из этого определения базы данных следует несколько важных выводов.
!д Порядок строк в таблицах не имеет значения. ~2 Должна быть предусмотрена возможность применять к таблицам реляционные операции (в своей работе Кодд называл таблицы "отношениями" — ге!аг!оп). ьз Применение реляционных операций к таблицам должно обеспечивать возможность создания виртуальных таблиц, соответствующих предъявленным требованиям.
Дальнейшее развитие предложенного подхода к рассмотрению базы данных как состоящей из отношений привело к становлению понятия нормализации. Нормализация н другие важные проблемы проектирования 279 Н фмолизация относится к числу наиболее часто упоминаемых и вместе с тем нвтфовилъно т(зактуемых понятий в пфофаммифовании. Каждый Роэ)габотчик программного обеспечения баз данных считает себя полностью освоившим п(пгнципы но)гмализации, п(остом что дмсствительно многие (зозбираются в этом вотфосе, по х(гайней эмре теоретически. Но, к сожалению, часто на этом так все и заканчивается. Изучение основных методов нофмолизации становится для нвкотофых тфоехтсфовгуиков лишь показателем того, что они "дмх ппвителъно" могут претендовать на звание а)гхитехто~а базы данных. Однако подобные спеуиалисты тазько упоминают нсфмолъные фсфмы в своик устных заявлениях, но не исполъзуютп на тфак тике.
На самом деле нужно не Рассуждать о необходимости но)змолизауии, а тфилмнлть ее как один иэ этапов создания тфоекта базы данных. Иногда необходимо п(завести тфоцесс шфмолизации данных до последней возможной степени, а в д)тугах условиях багге отфавданним становится Решение тфеднамм)генно денормализовать часть данных. К тому же в ходе ооугцествления самого тфоцесса но)тмолизауии часто можно достичь намеченной цели создания но)змалиэован ной базы данных несколькими )зозними способами. По мнению авоифа, ноф олизацию следует рассматривать как как один из тяфетичесхи обоснованных подходов х усове)тшенствованию спфукту)ты базы данных.
Решение о том, следует ли тфилмнять тот или иной метод но)змализауии, должно тфиниматъся с учетом возможности создания на основе тфи нци пав нормализации такого тфоехта базы данных, хоторый тсажется полностью приемлемьск с точки зрения практики. Не нужно слепо ве)тить тфиведенным в книгах (в то числе и в этой) котего)тическим )зехомендауилм, хасаюгцимся того, что следует делать в той или другой ситуауии; поступайте так, касс диктует ситуа уия, в котшфой вы находитесь. Книга позволяет автору лишь донести свои знания до читателя, но не дает возможноппи показать, как эти знания должны применяться в действительности (во всяком схучае, зто невозможно показать на бумаге). Вы должны сами достичь глубокого понимания основных понятий нормализации и на этой основе неухлонно добиватьсл налмченной иели создания наибазее подходяизего тфоехта базы данных.
Перейдем к описанию нормальных форм. Прежде всего следует отметить, что количество теоретически обоснованных нормальных форм равно шести. Однако многие рассматривают в качестве полностью нормализованной такую базу данных, нормализация которой проведена вплоть до третьей нормальной формы. Указанный подход является вполне оправданным, поскольку нормальные формы выше третьей в действительности применяются довольно редко. Поэтому в настоящей книге главным образом рассматриваются первые три нормальные формы. Тем не менее определенное внимание в данной главе будет также уделено трем остальным нормальным формам.
В предыдущих главах рассматривались способы создания первичных ключей и были приведены некоторые соображения в пользу их применения в таблицах. В частности, первичные ключи позволяют однозначно идентифицировать каждую строку, благодаря чему обеспечивается возможность точно задавать строки, на которые распространяется действие определенной операции.
Понятие нормализации полностью основано на определении самого первичного ключа и столбцов, входящих в состав первичного ключа. Поэтому применительно к нормализации часто приходится слышать следующую краткую формулировку: Основой но~мализауии являются ключи, только ключи и ничего х(томе хлючмс. Иногда встречается также забавное дополнение к этой формуле; 280 Глава 8 Основой н<фмализации являются ключи, только ключи и ничего к)золе ключтс, да поможет мне Кодд!' В этом и заключается предельно краткая сводка рекомендаций по проведению нормализации до третьей нормальной формы.
После того как обнаруживается, что все столбцы таблицы зависят исключительно от первичного ключа (рассматриваемого как единое целое, независимо от количества входящих в него столбцов), можно сделать вывод о достижении третьей нормальной формы. В следующих разделах рассматриваются различные нормальные формы и описано назначение каждой из них. Предварительные сведения Еще до того, как будет предпринята попытка преобразовать данные в первую нормальную форму, должны быть выполнены определенные условия.
Мало того, каждая таблица, подлежащая преобразованию в первую нормальную форму, должна соответствовать перечисленным ниже требованиям, поскольку в противном случае ее нельзя будет рассматривать как компонент реляционной базы данных, в полной степени соответствующий определению сущности. [2 Таблица должна представлять одну и только одну сущность (не допускается никаких попыток удаления части атрибутов одной сущности и добавления атрибутов другой сущности). Все строки должны быть уникальными, и на таблице должен быть задан первичный ключ. (3 Порядок расположения столбцов и строк не должен иметь значения. Таким образом, необходимо прежде всего правильно определить сущности. Применительно к некоторым из них решение указанной задачи становится довольно несложным, а другие сущности требуют для своего распознавания гораздо больше усилий.
Чаще всего в процессе нормализации определения многих сущностей становится более очевидными и точными. По крайней мере, необходимо прежде всего выявить сущности, поддающиеся идентификации. Проводя аналогию с объектноориентированным пузог)заимированием„можно отметить, что большинство логических суисностмг верхнего у)звеня близки по своему назначению объектом в объектной модели.
Еще раз рассмотрим чрезвычайно простую модель, о которой уже шла речь в данной книге, — модель системы сбыта. Прежде всего следует отметить, что в рассматриваемом примере нас не интересуют все возможные нюансы организации данных и не играет даже никакой роли вопрос о том, какие столбцы должны быть предусмотрены в таблице. Важно лишь определить, как должны быть выделены основные сущности, применяемые в системе. На первом этапе необходимо определить, что лежит в основе процесса обработки данных. А в конечном итоге должно быть создано по одной сущности в расчете на каждую элементарную единицу представления данных, применимую для представления требуемых данных в процессе обработки. Применительно к системе сбыта про- Игра слов — СосЫ и Сось — Примеч. пер.
Нормализация и другие важные проблемы проектирования 281 цесс обработки данных начинается с того, что заказчик звонит или приходит лично, после чего обращается к служащему, который принимает заказ (а после оплаты заказа выписывает счет-фактуру). Таким образом, при проведении первой итерации процедуры нормализации может быть выявлена одна сущность — заказ (обозначим сущность, представляющую заказы, как Огс1егя).
По мере приоб(зетвкия опыта в проведении проуесса нофмолизауии разработчику все чаще удается с самого начала выявлять все бельме и больше сущностей, даже п)зи не(явой итерауии. Но рассмат(зиваемый пример п)зеднозначен для того, чтобы показать, как другие необходимые сущности обна(зужива ются в пРоуессе нофмализауии. После определения сущностей необходимо приступить к подготовке исходного варианта набора столбцов, а затем на основании анализа перечня столбцов задать первичный ключ.