Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
536.pdf
Скачиваний:
1
Добавлен:
15.11.2022
Размер:
2.31 Mб
Скачать

ным таблицам относят все остальные (выделенные жирным шрифтом с подчеркиванием).

Одна из задач проектирования базы данных состоит в обеспечении способа идентификации различных объектов. Другими словами, система должна уметь отличать друг от друга отдельные строки и таблицы. Строки можно различать по значению первичного ключа таблицы. Неформально,

первичный ключ - это столбец, однозначно определяющий строку.

4.2. Первичные ключи. Что выбрать в качестве первичных ключей для каждой из таблиц?

Рассмотрим таблицу Клиент. Среди ее столбцов очевидным кандида­ том на первичный ключ является Название. Однако эта комбинация будет удовлетворять нас, пока таблица не разрастется до такой степени, что в ней появятся фирмы с одинаковыми названиями. Например, как только в таблице появятся два филиала (с одинаковыми названиями) одной и той же фирмы, поле Название перестанет однозначно идентифицировать каж-, дый филиал.

Другая проблема, возникающая при использовании имен в качестве универсальных идентификаторов, связана с частыми опечатками при их вводе. Поэтому хорошим решением обычно является создание специаль­ ного столбца, который и будет использоваться в качестве первичного клю­ ча. Реальными примерами таких уникальных идентификаторов могут быть код предприятия, номер лицензии, заказа, студенческого билета и т.п.

Чтобы показать, какие столбцы являются первичными ключами, мы подчеркиваем их следующим способом:

\ ч~\ ч - естественный первичный ключ (однозначно идентифицирует строку)

7 г; А - суррогатный ключ (создан исключительно для удобства)

Первичные ключи могут быть простыми и составными. Примерами простых первичных ключей могут служить IDN (таблицы Города, Группы,

Склад и т.д.), составных - ЮИ_группы и Ю Имат.цен. (таблица Матери­ альные ценности).

П р и м е ч а н и е : выбор первичных ключей является одним из ос­ новных шагов при проектировании базы данных. Несмотря на их важ­ ность, ранние версии SQL не поддерживали определение первичных клю­ чей. ANSI-стандарт SQL 1992 года, принятый сегодня большинством про­ изводителей, поддерживает предложение PRIMARY KEY в инструкции CREATE TABLE.

4.3. Нормализация данных

Процедура нормализации стремится к тому, чтобы все данные были только в одном месте. Другими словами, нормализация заключается в «выкидывании» дублирующихся полей. (Если же мы, наоборот, вставляем дублирующие поля в базу данных, то такой процесс называется денорма­ лизацией.)

Например, в таблице Остатки жирным курсивом выделены дубли­ рующиеся поля. В данном случае мы применили процедуру денормализа­ ции в учебных целях. В реальной базе данных такие поля следует удалять в связи с возможностью возникновения неопределенностей. Именно избе­ жание неопределенностей является основной задачей нормализации дан­ ных.

Выделяют две основные причины неопределенностей:

Неоднозначность (т.е. одни и те же данные располагаются в раз­ личных таблицах, при этом изменения, внесенные в поле Цена (таблица Перемещение), не приведут к изменениям в поле Цена (таблица Остатки); как следствие - один и тот же товар одновременно имеет две различные цены в одной базе данных).

Противоречивость (чаще всего является результатом неоднознач­ ности; когда, например, по одним данным какой-либо товар находится на складе NN, а по другим - его (товара) вообще нет).

Код выделил существование 5 форм нормализации. Но на практике обычно используют первые три нормальные формы.

4.3.1. Первая нормальная форма требует, чтобы на любом пересече­ нии строки и столбца находилось единственное значение, которое должно быть атомарным, то есть оно не может быть разбито на составляющие. Кроме того, в таблице, удовлетворяющей первой нормальной форме, не должно быть повторяющихся групп, а также пустых первичных ключей.

Занимаясь поисками повторяющихся полей следует разбить на ком­ поненты все составные столбцы: например, в «отделе кадров» столбец ФИО нужно разбить на два столбца - Фамилия и Имя Отчество, посколь­ ку человек по тем или иным причинам может поменять фамилию. (Возмо­ жен вариант отдельного хранения столбцов Имя и Отчество по той же причине, что и Фамилия.)

4.3.2. Вторая нормальная форма. Второе правило нормализации тре­ бует, чтобы любой неключевой столбец зависел бы от всего первичного

ключа. Следовательно, представление таблицы во второй нормальной форме требует, чтобы все столбцы, не являющиеся первичными ключами (столбцы, описывающие объект, но однозначно не идентифицирующие его), зависели бы от всего первичного ключа, а не от его отдельных ком­ понентов.

Вторая нормальная форма напрямую связана с правилом выбора пер­ вичного ключа, то есть с определением уникального идентификатора. Ес­ ли естественный ключ был выбран неправильно, то второе правило нор­ мализации выполняться не будет.

4.3.3. Третья нормальная форма повышает требования второй нор­ мальной формы: она не ограничивается составными первичными ключа­ ми, а требует, чтобы ни один неключевой столбец не зависел от другого неключевого столбца. Любой неключевой столбец должен зависеть только от столбца первичного ключа. Другими словами, любой неключевой стол­ бец зависит только от всего ключа и больше ни от чего, кроме ключа.

Например, если бы lDN_zopoda и его название находились в одной таблице {Клиент), то данная таблица содержала бы два связанных поля. А это не удовлетворяет третьей нормальной форме. Поэтому мы и выдели­ ли столбец Город в отдельную таблицу.

Заключительные замечания. Разработав структуру базы данных, вы должны создать таблицы и заполнить их некоторыми данными. Затем вы должны проверить разработанную структуру, запуская на выполнение за­ просы и изменяя данные. Эти тесты могут выявить недочеты в исходной структуре данных.

Перед практическим использованием созданной базы данных вам по­ требуется рассмотреть еще несколько важных вопросов: индексирование, безопасность и целостность. Обеспечение целостности - это одна из глав­ ных задач в процессе проектирования базы данных. Вы должны быть уве­ рены, что изменения в одной части данных распространяются на все ко­ пии этих данных по всей базе данных.

4.4. Типы данных

Тип данных (datatype) - это первая характеристика, которая задается для столбца таблицы, при этом определяется тип хранящейся в столбце информации. Тип данных задается после имени столбца с помощью соот­ ветствующего ключевого слова. Кроме этого, может потребоваться ввод некоторых параметров. После определения типа данных столбца таблицы он хранится в виде постоянной характеристики столбца и не может быть изменен. Типы данных можно также использовать для определения других

структур хранения данных, таких как параметры и локальные переменные. Параметры и локальные переменные - это структуры, которые хранятся не на диске, а в оперативной памяти. Для определения параметров и пере­ менных имеются ограничения на подмножество типов данных.

Рассмотрим встроенные в систему типы данных, которые можно ис­ пользовать в SQL Server при определении таблиц и хранимых процедур.

4.4.1.Числовые целые типы данных. Числовые (numeric) целые (inte­ ger) типы данных - это первые из нескольких типов данных, которые можно использовать для определения сохраняемых объектов. Используя эти типы данных, можно напрямую (без использования функций) произ­ водить арифметические операции. Число, хранящееся как целое, всегда занимает один и то же объем памяти, независимо от значения числа.

Тип in t, или integer. Можно хранить отрицательные или положитель­ ные целые числа.

4.4.2.Числовые типы данных с плавающей точкой. Типы данных с плавающей точкой (floating point) - это вторая группа числовых типов данных, которые могут использоваться для определения сохраняемых структур, таких как столбцы таблиц. В отличие от целых типов данных, в качестве значений с плавающей точкой могут храниться десятичные числа.

Ксожалению, для типа данных с плавающей точкой характерна ошибка округления (rounding error). Хранение значений в числовом типе данных, для которого характерна ошибка округления, имеет смысл только

втом случае, если количество хранящихся цифр соответствует заданной точности. Например, если заданная точность определена в пятнадцать цифр, а число, которое необходимо сохранить, длиннее, то введенные пят­ надцать цифр будут представлять исходное число не точно.

Кроме этого, числа с плавающей точкой могут искажать результаты вычислений. Ошибка округления действует на наименее значимые, то есть крайние справа цифры числа. Имеет смысл для хранения чисел выбирать такой тип данных с плавающей точкой, который соответствует заданной точности.

П р и м е ч а н и е : Microsoft называет типы данных с плавающей точ­ кой приблизительными числовыми типами данных (approximate numeric datatypes), поскольку значения таких типов могут быть представлены только внутри определенных границ, определяемых механизмом хране­ ния. Следует избегать сравнений (например, в предложениях WHERE) данных приблизительных типов.

При типе real (вещественный) можно хранить положительные или от­ рицательные десятичные дроби как данные типа real с точностью до семи цифр.

Следует рассматривать ранее указанные границы диапазона как при­ близительные и проверять реальный диапазон доступных чисел для типа данных с плавающей точкой. Поскольку диапазон значений и их представ­ ление на самом деле очень зависят от платформы.

4.4.3. Символьные типы данных (character) часто применяются для определения столбцов таблицы и других структур базы данных. Символь­ ные типы данных позволяют хранить более широкий набор символов, чем числовые типы данных, поскольку допускают хранение букв, а также чи­ словых и специальных символов, например ? или >. При загрузке в об­ ласть хранения, такую как столбец таблицы, символьные данные вводятся

водинарных или двойных кавычках.

Тип char(n). При хранении данных этого типа для каждого символа используется 1 или 2 байта. Число, заключенное в круглые скобки, опре­ деляет размер области хранения максимального количества символов дан­ ного столбца. Например, если вы определили для столбца таблицы тип char(16), то длина любого значения столбца не должна превышать 16 сим­ волов.

Тип varchar(n). Для хранения строк переменной длины. В отличи^ от типа данных char, размер области хранения для данных типа varchar меняется в соответствии с фактическим количеством символов, хранящих­ ся в каждом столбце.

Тип данных text используется для хранения больших объемов тек­ стовой информации. Данные хранятся в виде строк (не путать со строками таблицы) символов фиксированной длины, поэтому такой тип данных яв­ ляется неструктурированным. Как следствие - данные такого типа не мо­ гут быть использованы в запросе. При использовании инструкции insert для вставки данных в столбец, определенный для типа данных text, они должны быть заключены в одинарные кавычки.

При работе с символьными типами данных необходимо помнить сле­ дующее: если для столбца таблицы определяется тип данных char, varchar, то максимальная длина задается для всех значений, которые впоследствии будут введены в этот столбец.

4.4.4. Типы данных date, time и datetime используются для хранения соответственно даты, времени и даты и времени одновременно. Гораздо удобнее хранить дату и время в формате одного из предназначенных для этого типов данных, а не в виде строки символов. Если вы храните дату и

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]