Программирование >>  Руководство по sql 

1 ... 14 15 16 [ 17 ] 18 19 20 ... 105


Выбор точности. Десятичные типы с плавающей точкой позволяют устанавливать требуемую точность. Например, если известно, что десятичное значение состоит строго из щести цифр, причем три из них располагаются после запятой, его можно описать как decimal(6,3).

Назначение нулевого статуса

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

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

Назначение ненулевого статуса столбцу означает, что все его значения должны быть определены. Если вы не задали какое-то значение столбца, система выдаст соответствующее сообщение об ошибке. (В системах, использующих значения по умолчанию, эти значения будут вводиться автоматически во все пустые места столбцов с ненулевым статусом.) Во многих системах по умолчанию используется NULL. Однако не нужно особенно полагаться на значения по умолчанию, лучше четко сформулировать то, что вы хотите получить.

Как же поступать с нулевым статусом столбцов при проектировании таблицы? Нельзя допускать появление нулей в столбцах, значения которых являются критическими для всей базы данных. Например, нули не могут появляться в столбцах первичных ключей, так как в этом случае они не будут однозначно идентифицировать строки. Так, без столбца auJd нельзя было бы определить авторов книг из базы данных bookbiz. Эта база данных построена так, что таблицы authors и titles связываются через объединение по столбцам aujid и titlejd.

Кроме того, целесообразно запретить нулевые значения в столбцах aujname и аиJname, так как достаточно странно вводить адрес и телефон автора, не зная его имени и фамилии.

Однако если известно, что определенные данные в столбце могут быть неизвестны, тогда можно разрешить появление в нем нулевых значений. Например, могут быть неизвестны адреса и номера телефонов. В столбце имен также могут быть нулевые значения, так как некоторые авторы используют однословные псевдонимы (например, Colette).

В таблице titles появление нулей не допускается только в столбцах titlejd и title, так как первый является первичным ключом, а каждая книга идентифицируется уникальным номером. Однако в столбце advance могут находиться нулевые значения. Это может означать, что автор и издатель все еще не договорились о гонораре или его просто забыл ввести какой-то клерк.

Тогда как в случае с гонораром нуль обозначает пока еще неизвестное значение , в других ситуациях он может иметь совсем другие значения. Нуль может обозначать значение, которое вообще никогда не станет известно. Например, если в таблицу authors добавляется поле phone, а телефоны некоторых авторов неизвестны, они, возможно, навсегда заменяются нулями. Кроме того, нуль может означать, что некоторое значение в принципе неприменимо, например, если у автора вообще нет телефона.

В отличие от первичных ключей, внешние ключи иногда могут иметь нулевые значения. В случае с книгами и издателями в столбце titles.pub id допускаются нулевые значения. Это, конечно, связано с бизнес-моделью, используемой в базе данных bookbiz. книги иногда могут приобретаться головной фирмой и только через некоторое время попадать в один из ее филиалов.

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



Процесс создания таблицы

Создание таблицы, подобно созданию базы данных, представляет собой пошаговый процесс, начинаюшийся с проектирования и заканчиваюшийся вводом команд SQL. Ниже описываются основные действия, которые надо предпринять для создания таблицы. При этом предполагается, что база данных уже спроектирована и нормализована, и, следовательно, известно, какие столбцы должны быть в каких таблицах.

Определить типы данных (длину, точность, если необходимо) для каждого столбца.

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

Решить, какие столбцы должны содержать только уникальные значения. (В системах, не использующих ограничения, уникальность может обеспечиваться за счет индексирования, обсуждаемого дальше в этой главе и в главе 10. Предложения PRIMARY KEY и UNIQUE также описываются дальше в этой главе.)

Разобраться с парами первичный ключ-внешний ключ. Простой синтаксис оператора CREATE TABLE, используемый в базе данных bookbiz, не позволяет выполнять над этими парами какие-либо действия. Можно только убедиться в совместимости их типов данных, размеров и нулевых статусов. Используя описываемый далее более сложный синтаксис, можно определять Офаничения для обеспечения ссылочной целостности.

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

Создать таблицу (и в случае необходимости все нужные индексы) с помощью операторов CREATE TABLE и CREATE INDEX.

На рис. 3.5 представлена сфуктура таблицы titles: имена столбцов, типы данных, нулевые статусы, столбцы с уникальными значениями, первичные и вторичные ключи.

Столбец

Тип данных

Нуль?

Уникальный?

Ключи

title id

varchar(ll)

not null

да-titleidind

первичный

title

varchar(80)

not null

да-tilteind

type

char(12)

null

pub id

char(4)

null

внешний

(таблица publishers)

price

money

null

advance

money

null

ytd sale

null

contract

not null

notes

varchar(200)

null

pubdate

datetime

null

Рис. 3.5. Структура таблицы titles

Определение таблиц в базе данных bookbiz. Теперь вы готовы к созданию реальных таблиц. Ниже приведена команда CREATE TABLE для таблицы titles.



SQL:

create table titles (title id char(6) not null, title varchar(80) not null, type char(12) null, pub id char(4) null, price money null, advance money null, ytd sales int null, contract bit not null, notes varchar(200) null, pubdate datetime null)

Если битовый тип данных в вашей системе не поддерживается, то для описания столбца contract используйте символьный тип. В этом столбце допускаются и нулевые значения.

Операторы CREATE TABLE для восьми оставшихся таблиц базы данных bookbiz приведены в Приложении Г, а также содержатся на прилагаемом к книге компакт-диске.

СОЗДАНИЕ ИНДЕКСОВ

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

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

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

Еще одно отличие между предметными указателями книг и индексами баз данных состоит в том, что очень часто таблица имеет несколько индексов (правда, иногда нечто подобное встречается и в книгах - тематический указатель и указатель по авторам). Объединяет предметные указатели и индексы то, что и книга, и таблица могут их вообще не иметь.

Дальше в этой главе приводится синтаксис операторов CREATE INDEX и DROP INDEX, описываются способы индексирования в реляционных системах и даются рекомендации по выбору подходящих для индексирования столбцов.

Оператор CREATE INDEX

в большинстве систем имеется команда следующего вида:

CREATE [UNIQUE] INDEX имя индекса ON имя таблицы (имя столбца)



1 ... 14 15 16 [ 17 ] 18 19 20 ... 105

© 2006 - 2025 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки.
Яндекс.Метрика