Программирование баз данных MS SQL Server (1084479), страница 84
Текст из файла (страница 84)
Нормализация и другие важные проблемы проектирования ол9 Рис. 8.29. Диалоговое вкнв ТаЫез апс) Со!испив Щелкните на кнопке ОК, чтобы закрыть диалоговое окно, показанное на рис. 8.29. После этого появится диалоговое окно гоге19п Кеу Р)е1а11опвЫр. Щелкните на кнопке ОК также и в этом окне, чтобы подтвердить правильность заданных по умолчанию значений. Как только будет выполнен щелчок на кнопке ОК во втором диэлоговом окне, во вновь создаваемой базе данных появится первая связь (рис.
8.30). оггвг ~1 Рис. 8ЗО. Диаграмма, на натвРвй показана впервые евгданная связь После этого остается только выполнить аналогичные действия для создания дв)х других связей. Во-первых, необходимо установить связь "один ко многим" от таблицы Огбегэ к таблице Огс1егРееа11з (поскольку под заголовком одного заказа может быть задано много строк расшифровки) на основе столбца Огс1ег1О.
Во-вторых, необходимо сформировать аналогичную связь, проходящую от таблицы Ргос1пссэ к таблице Огс1егпега11э (поскольку',одна строка с данными о товаре таблицы Ргос1псгэ может соответствовать нескольким строкам таблицы ОгйегРееа11э) на основе столбца Раггно, как показано на рис. 8.31. 330 Глава 8 Рис. 8.31. Диаерамма с изображением всех необходимых связей Ввод в действие некоторых ограничений В настоящей главе при описании процесса создания таблиц и связей упоминалось одно требование, которое еще не было нами выполнено.
Но для реализации этого требования необходимо ввести в действие ограничение. Речь идет о том, какой формат должен быть предусмотрен для представления идентификаторов деталей. Предположим, что идентификаторы деталей имеют формат "9д9 9 9 9", где "9" обозначает цифру от О до 9, а "д" — буквенный (нечисловой) символ. Чтобы выполнить это требование, следует щелкнуть правой кнопкой мыши на таблице Ргоопссэ и выбрать во всплывающем меню команду СйесК Сопэ1гагп1в для отображения диалогового окна Сйвск Сопв1га!п1а, показанного на рис.
8.32. Рис. 8З2. Диалоговое окно СйесК Сопя1гв!п1а Нормализация и другие важные проблемы проектирования 331 Начиная с этого момента появляется возможность щелкнуть на кнопке Ас]с] и ввести в действие рассматриваемое ограничение. Для того чтобы ограничить возможность ввода идентификаторов деталей только такими строками, которые имеют заданный формат, необходимо воспользоваться оператором [.1КЕ, например, как показано ниже. (Раггио ЫКЕ ' [0-9] [й-а] [Π— 9! [Π— 9] [0-9] (0-9] ' ] При этом фактически будет осуществляться проверка каждого символа, который пользователь попытается ввести в столбец Раггио рассматриваемой таблицы.
Первый символ должен представлять собой цифру от О до 9, второй — букву от й до К (символ алфавита), а следующие четыре символа снова должны быть представлены цифровыми знаками (от 0 до 9). Для этого достаточно ввести указанную вьпле строку в текстовое поле, обозначенное как Ехргезв[оп. Кроме того, было решено сменить предусмотренное по умолчанию имя для ограничения с СК Ргос[псгэ на СК Раггио, как показано на рис. 8.33. Рис. 839. Диалоговое окно Сава]с Сопясгахпбя со всеми заданными нарамеизРами Итак, очевидно, что описанная выше процедура не занимает много времени, и на этом завершается создание первой базы данных, пример проектирования которой рассматривается в настоящей книге.
Безусловно, в данном случае рассматривалась относительно простая модель, но в ходе ее описания применялись операции, которые, скорее всего, позволяют реализовать не менее чем на 90% любую реальную архитектуру данных. Резюме Задача проектирования баз данных является чрезвычайно сложной, н одной лишь этой теме посвящено много превосходных книг. Разъяснить каждое понятие, относящееся к проектированию баз данных, всего лишь в одной нли двух главах практически невозможно. 332 Глава 8 Упражнения 8.1. Провести нормализацию данных, приведенных в табл. 8.18, с преобразованием в третью нормальную форму. Таблица 8.13. Исходные данные для упр. 8.1 Раеьепе ЯЯН РЬуаьсьап Нсщ>1Саь тгеаиаепе Мппеваее Ве1еааепага Баа Ярапе 555-55-5555 10/01/2005 11/07/2005 'ососсау Лььегг ЯсЬее Схег Мауо С11п1с Яа11о Наььу 10/10/2005 10/10/2005 Ь1Ьеге Бсьее1Ссес 333-33-3333 МСЬЬ Согоссопе 1п3есгсоп Ресег Рурег Р1сК1е Ехсгасс1оп 11/О//2005 11/07/2005 222-22-2222 Мо ВеСта мпзсагп 011п1с Мсскт воовссхеу 11/07/2005 11/07/2005 123-45-6789 СосС1хопе 1п3есС1оп БЬеесе ЯЬес1а Моагагс С11псс Тем не менее настояпсая глава позволяет читателю получить солидную начальную подготовку.
Прежде всего, в этой главе показано, что данные рассматриваются как нормализованные после их приведения к третьей нормальной форме. На таком уровне обеспечивается устранение дублирующейся информации и данные становятся полностью зависимыми от используемых ключей. Иными словами, нормализованными считаются данные, которые зависят от "ключей, только ключей и ничего друтого, кроме ключей". В этой главе было также показано.
что нормализацию не всегда можно считать единственным применимым подходом к усовершенствованию базы данных, поскольку тщательно продуманная денормализация данных позволяет упростить работу пользователей с базой данных и повысить производительность решения задач формирования отчетов. Наконец, в этой главе рассматривались некоторые понятия, не связанные с нормализацией, на примере разработки проекта базы данных, а также было указано, как использовать инструментальные средства даН1пс1 для проектирования базы данных. В следующей главе приведено очень подробное описание того, как обеспечивается хранение информации в СУБД 8Я1.
8егуег и как лучше всего использовать индексы. 334 Глава 9 поэтому такие объекты широко известны. С другой стороны, некоторые другие объекты недоступны для постороннего взгляда, и, несмотря на то, что в определенных случаях к ним может быть предоставлен непосредственный доступ, обычно они остаются недостижимыми. Ниже приведено последовательное описание объектов иерархии структур данных. База данных База данных как объект иерархии структур данных является наиболее известной. Автору даже приходилось слышать заявление некоторых специалистов, что они знают о базах данных все. Возможно, они действительно правы, но нельзя забывать, что каждая база данных представляет собой уникальную сущность, поскольку она находится на самом высоком уровне структур хранения данных (на каком-то конкретном сервере). Уровень базы данных — это наивысший уровень, на котором могут устанавливаться блокировки, хотя и невозможно явно создать блокировку уровня базы данных.
Блоки)зевка — это обгект, одновременно напоминающий замок и марке)з места х)эанения данных, кото)зые используются системой. Специалисты, занимающиеся разработкой п)зог~оммного обеспечения с пЯименениеи СУБД 5® 5егоа' ~или, с этой точки зоения, с помощью любой фугой СУБД), не сомневаются в там, что для успешной эксплуатации системы абсаеютно необходимо знать все особенности блоки)зевок и правильно ими упу~авлять. Большой обгем сведений о блоки)зоекох будет приведен в главе з4, а в данной главе возможно сти задания блокировал на обсев тих в СУБД 50з 5гтоег будут ~фозпко узассмтпфиваться п)га обсуждении стузукту)з памяти.
Зкстент Экстент — это основная единица памяти, используемая при распределении пространства для таблиц и индексов. Экстент состоит из восьми смежных страниц данных объемом 64 Кбайт. Для тех специалистов. которые знакомы только с принципами организации памяти в операционной системе, принятый в СУБД подход к распределению пространства на основе экстентов вместо использования самого пространства может оказаться довольно сложным для понимания. Ниже приведены наиболее важные сведения, касающиеся применения экстентов. ьг Если вслед за заполнением очередного экстента возникает необходимость записать следующую строку, то для этой строки выделяется пространство, объем которого определяется не размером самой строки, а размером целого нового экстента.
Многие разработчики, впервые приступая к эксплуатации СУБД 5ЯЕ 5егчег, отчасти ошибаются в своих оценках потребности в пространстве, поскольку не учитывают, что выделение памяти происходит калсдсай раз в объеме одного экстента, а не одной строки. сл После записи новой строки во вновь выделенный экстент остальной объем памяти остается свободным. Таким образом, происходит заблаговременное распределение пространства, поэтому в СУБД 5ЯЕ Бегчег достигается экономия времени, поскольку не требуется выполнять операцию распределения пространства памяти после поступления каждой новой строки. Структуры памяти н индексные структуры ЯЯЕ Бегчег 335 На первый взгляд может показаться, что выделение целого экстента для размещения всего лишь одной строки, в расчете на то, что в дальнейшем в экстент (экстенты), распределенный к настоящему времени, будет добавлено требуемое количество строк, представляет собой непроизводительный способ использования пространства, но обычно объем пространства, который применяется непроизводительно (остается незанятым), не так уж велик.
Тем не менее о том, что во многих экстентах может оставаться неиспользуемое пространство, всегда следует помнить, особенно если условия эксплуатации базы данных таковы, что в результате удаления и добавления строк фрагментация пространства в экстентах постоянно увеличивается. В целом одним из важных преимуществ распределения пространства памяти с помощью экстентов является то, что часть пространства распределяется заблаговременно, поэтому в СУБД ЯО). Бегчег удается исключить определенную часть затрат времени при выполнении операций распределения памяти. Дело в том, что в СУБД БО1.
Бегхег операция распределения дополнительного пространства выполняется только после того, как потребуется новый экстент, поэтому не приходится заниматься проблемами распределения пространства при записи каждой новой строки. Необходимо узозличать объем п)зостранства, занимаемый зкстентами, и обем п)гост)занства, кото)зъгй занимает сама база данных. зг)гост)занспюо памяти, въгделенное для базы данных на жестком диске, становится недоступным для )застфедегения памяти под какие- либо другие объекты, т.е. объем свободного пузост)занства на жестком диске уменьшается на зту величину А зкстенты, в свою очг)зедь, )засп)зедееяются в п)зеделах общего обЪема п)юстфанопва, заузезе(зви)зованного для базы даннь х. Страница Во многом аналогично тому, что экстент является единицей распределения памяти в базе данных, страница — это единица распределения памяти в каждом конкретном экстенте.