Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
1_Основы_ SQL.doc
Скачиваний:
5
Добавлен:
01.05.2025
Размер:
164 Кб
Скачать
☆

Id_клиента integer primary key,

Имя VARCHAR (25),

Адрес addr,

Телефон VARCHAR (15)

);

Тип данных ROW (запись) появился впервые в SQL:1999, а раньше без него прекрасно обходились.

Тип ARRAY (массив) также впервые появился в SQL: 1999 и нарушает принцип первой нормальной формы, но несколько иначе, чем тип ROW. Тип ARRAY дает возможность одному из обычных типов иметь множество значений внутри значения одного табличного столбца. Например, клиент может иметь несколько номеров телефонов и вы можете пожелать хранить их все как одно многозначное значение единственного столбца Телефон, а не как обычные значения нескольких столбцов Телефон1, Телефон2 и т. п. Вот пример, в котором каждая ячейка столбца Телефон может содержать до трех номеров телефона:

CREATE TABLE Клиенты

(

ID_клиента INTEGER PRIMARY KEY,

Имя VARCHAR (25),

Адрес addr,

Телефон VARCHAR (15) ARRAY [3]

);

Следующее SQL-выражение добавляет в таблицу Клиенты новую запись и вводит в нее значения столбцов:

INSERT INTO Клиенты (Имя, Телефон)

VALUES ('Петров Петр Петрович', {'444-4444', '123-4567', '777-8899'});

Тип данных MULTISET (мультимножество) появился впервые в SQL:2003. Если массив — это упорядоченное множество элементов, однозначно связанных с их местом в массиве посредством индекса, то мультимножество — неупорядоченная совокупность элементов. Этот тип данных используется очень редко.

ПОЛЬЗОВАТЕЛЬСКИЕ ТИПЫ ДАННЫХ

Пользовательские типы данных (User Defined Types, UDT) определяются пользователем по своему усмотрению для каких-то своих целей. Данная возможность впервые появилась в SQL: 1999. Одно из важнейших направлений применения заключается в устранении некоторых несоответствий между основными типами данных SQL и типами данных в базовом языке, на котором пишутся приложения. К созданию своих типов данных обычно прибегают программисты, а не рядовые пользователи баз данных, даже владеющие языком SQL. Тем не менее, им также не помешает ознакомиться в общих чертах с этой возможностью SQL.

Отдельные типы

Простейшей формой пользовательских типов являются так называемые отдельные (различающиеся) типы. Они создаются на основе ранее определенных типов, например, основных типов SQL. Синтаксис создания отдельного типа данных такой:

CREATE DISTINCT TYPE имяТипа AS определенныйТип;

Определим в качестве примера тип MONEY для хранения денежных сумм. С этой целью можно воспользоваться уже определенным числовым типом DECIMAL:

CREATE DISTINCT TYPE MONEY AS DECIMAL (9,2);

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

CREATE DISTINCT TYPE EURO AS DECIMAL (9,2);

CREATE DISTINCT TYPE USD AS DECIMAL (9,2);

CREATE DISTINCT TYPE RU AS DECIMAL (9,2);

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

Допустим, имеется таблица Прайс_лист (Товар, Цена_USD, Цена_RU), в которой столбцы Цена_USD и Цена_RU определены как столбцы типов USD и RU соответственно. Эти столбцы содержат цены товаров в американских долларах и рублях. Предположим, что курс доллара к рублю изменился, и мы хотим изменить цены в рублях. Если бы Столбцы Цена_USD и Цена_RU были одного и того же типа, то данную операцию можно было бы выполнить с помощью следующего SQL-выражения:

UPDATE Прайс_лист SET Цена_RU = k * Цена_USD;

Здесь k — коэффициент конвертации.

Но поскольку столбцы Цена_USD и Цена_RU имеют различные типы, то необходимо выполнить такое выражение:

UPDATE Прайс_дист

SET CAST(Цена_RU AS DECIMAL (9,2) = k * CAST(Цена_USD AS DECIMAL (9,2));

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