Выбрать главу
Значения NULL

Как вы уже знаете из урока 1, значение NULL означает пропущенное значение или поле в строке данных, которому не было присвоено значения. Значение NULL используется в SQL почти повсюду - при создании таблиц, условий поиска в запросах и даже в буквальных строках.

Для значения NULL можно использовать следующие две формы ссылки на него.

• NULL (ключевое слово NULL)

• ' ' (два знака одиночной кавычки и ничего между ними)

Следующая строка не представляет значения NULL, а представляет строку, содержащую символы N-U-L-L:

'NULL'

Значения типа BOOLEAN

Значения типа BOOLEAN (логические значения) могут принимать значения TRUE (истина), FALSE (ложь) или NULL. Значения типа BOOLEAN используются для сравнения данных. Например, если в запросе заданы несколько критериев, каждое из заданных условий оценивается и им присваиваются значения TRUE, FALSE или NULL. Соответствующие данные включаются в ответ на запрос только тогда, когда для всех условий возвращается логическое значение TRUE. Если же среди возвращенных значений будут либо FALSE, либо NULL, данные в ответ на запрос могут не"включаться.

Рассмотрим следующий пример.

WHERE NAME = 'SMITH'

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

Пользовательские типы данных

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

CREATE TYPE PERSON AS OBJECT

(NAME VARCHAR2(30),

SSN VARCHAR2(9));

Ссылаться на определенный таким образом пользовательский тип данных можно так:

CREATE TABLE EMP_PAY (EMPLOYEE PERSON, SALARY NUMBER(10,2), HIRE_DATE DATE);

Обратите внимание на то, что для первого столбца с именем EMPLOYEE задан тип данных PERSON, являющийся пользовательским типом данных, созданным в первом примере.

ALTER DOMAIN MONEY_D

ADD CONSTRAINT MONEY__CON1

CHECK (VALUE > 5};

Сослаться на домен можно так:

CREATE TABLE EMP__PAY

(EMP_ID NUMBER(9),

EMP_NAME VARCHAR2(30),

PAY_RATE MONEY_D);

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

Резюме

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

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

Вопросы и ответы

Почему можно вводить числа (например, идентификационный код) в поля, определенные как строки символов?

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

Я никак не могу понять разницу между типами данных фиксированной длины и переменной длины. Можно ли получить более подробные объяснения?

Скажем, фамилия некой персоны определена как тип данных фиксированной длины с заданной длиной 20 байт. Предположим также, что это фамилия Смит. После ввода данных в таблицу окажутся занятыми все 20 байт: 4 займет фамилия и 16 - пробелы (так как тип данных предполагается фиксированной длины). Если же использовать тип данных переменной длины с максимальной длиной 20 байт, то введенная фамилия Смит займет ровно 4 байта.

Практикум

Задания практических занятий разделены на тесты и упражнения. Тесты предназначены для проверки общего уровня понимания рассмотренного материала. Упражнения дают возможность применить на практике идеи, обсуждавшиеся в ходе текущего урока, в комбинации с идеями из предыдущих уроков. Мы рекомендуем ответить на тестовые вопросы и выполнить упражнения прежде, чем продолжать дальнейшее чтение книги. Ответы можно про'верить по Приложению Б, "Ответы".

Тесты

1. Верно ли утверждение: "Индивидуальный идентификационный код может быть любым из следующих типов данных: символьным фиксированной длины, символьным переменной длины или числовым?"

2. Верно ли утверждение: "Масштаб числового значения - это максимальная допустимая для значения длина?"

3. Все ли реализации используют одинаковые типы данных?

4. Какими для определенных ниже типов данных являются точности и масштабы значений?

DECIMAL(4,2) DECIMAL(10,2) DECIMAL(14,1)

5. Какие из следующих данных могут быть введены в столбец, тип данных которого DECIMAL(4,1)? а. 16.2 б. 116.2 в. 16.21 г. 1116.2 Д. 1116.21

Упражнения

1. Рассмотрите следующие имена столбцов и выберите для них подходящий тип данных и подходящую длину.

a ssn

б state

в. city

г. phone_number

д. zip

е. last__name

ж. firs t_name

з middle_narre

и. salary

к. houriy_pay_rate

л. date_hired

2. Для столбцов с теми же именами решите, следует ли для них определить значения NULL или NOT NULL. Обратите внимание на то, что в некоторых случаях, когда для столбца предусмотрено NOT NULI, значением соответствующего поля в строке может быть NULL, и наоборот

a ssn

б state

в city

г. phone_number

д. zip

е. last_name

ж. first_name

з. middle_name

и. salary

к hourly_pay_rate

л. date_hired

3-й час Управление объектами базы данных

На этом уроке мы обсудим объекты базы данных: узнаем, что они из себя представляют, как они работают, в каком виде хранятся и как связаны друг с другом. Объекты базы данных составляют основу реляционной базы данных. Эти объекты представляют собой логически цельные единицы, используемые для хранения информации, и поэтому на них ссылаются как на объекты базы данных нижнего уровня (back-end database). Большинство из приводимых в тексте этого урока инструкций относится к таблицам, но существуют и другие объекты базы данных, обсуждение которых предполагается по ходу изучения материала книги в других уроках.

Основными на этом уроке будут следующие темы.

• Знакомство с объектами базы данных

• Знакомство со схемами

• Структура таблиц и работа с ними

• Обсуждение природы и атрибутов таблиц