Типи даних мови SQL, визначені стандартом

Дані - це сукупна інформація, що зберігається в базі даних у вигляді одного з різних типів. За допомогою типів даних встановлюються основні правила для даних, що містяться в конкретному стовпці таблиці, у тому числі розмір пам'яті, що виділяється для них.

У мові SQL є шість скалярних типів даних, визначених стандартом. Їх короткий опис наведено в таблиці.

Символьні дані

Символьні дані складаються з послідовності символів, що входять до певного творцями СУБД набір символів. Оскільки набори символів є специфічними для різних діалектів мови SQL, перелік символів, які можуть входити до значень даних символьного типу, також залежить від конкретної реалізації. Найчастіше використовуються набори символів ASCII та EBCDIC. Для визначення даних символьного типу використовується такий формат:

При визначенні стовпця з символьним типом даних параметр довжина застосовується для вказівки максимальної кількості символів, які можуть бути поміщені в стовпець (за замовчуванням приймається значення 1). Символьний рядок може бути визначений як довжину, що має фіксовану або змінну (VARYING). Якщо рядок визначено з фіксованою довжиною значень, то при введенні до неї меншої кількості символів значення доповнюється до зазначеної довжини пробілами, що додаються праворуч. Якщо рядок визначено зі змінною довжиною значень, то при введенні в неї меншої кількості символів у базі даних буде збережено лише введені символи, що дозволить досягти певної економії зовнішньої пам'яті.

Бітові дані

Бітовий тип даних використовується визначення бітових рядків, тобто. послідовності двійкових цифр (бітів), кожна з яких може мати значення або 0 або 1. Данібітового типу визначаються за допомогою наступного формату:

Точні числа

Тип точних числових даних застосовується визначення чисел, які мають точне уявлення, тобто. числа складаються з цифр, необов'язкової десяткової точки та необов'язкового символу знака. Дані точного числового типу визначаються точністю та довжиною дробової частини. Точність задає загальну кількість значних десяткових цифр числа, до якого входить довжина як цілої частини, і дробової, але не враховуючи самої десяткової точки. Масштаб вказує кількість дрібних десяткових розрядів числа.

Типи NUMERIC та DECIMAL призначені для зберігання чисел у десятковому форматі. За замовчуванням довжина дробової частини дорівнює нулю, а точність, що приймається за умовчанням, залежить від реалізації. Тип INTEGER (INT) використовується для зберігання великих позитивних чи негативних цілих чисел. Тип SMALLINT – зберігання невеликих позитивних чи негативних цілих чисел; у цьому випадку витрата зовнішньої пам'яті суттєво скорочується.

Округлені числа

Тип округлених чисел застосовується для опису даних, які не можна точно уявити на комп'ютері, зокрема дійсних чисел. Округлені числа або числа з плаваючою точкою подаються в науковій нотації, при якій число записується за допомогою мантиси, помноженої на певний рівень десяти (порядок), наприклад: 10Е3, +5.2Е6, -0.2Е-4. Для визначення даних речового типу використовується формат:

Параметр точність задає кількість значних цифр мантиси. Точність типів REAL та DOUBLE PRECISION залежить від конкретної реалізації.

Дата та час

Тип даних "дата/час" використовується визначення моментів часу з деякою встановленої точністю. Стандарт SQL підтримує такий формат:

Тип даних DATE використовується для зберігання календарних дат, що включають поля YEAR (рік), MONTH (місяць) та DAY (день). Тип даних TIME – для зберігання позначок часу, що включають поля HOUR (годинник), MINUTE (хвилини) та SECOND (секунди). Тип даних TIMESTAMP – для спільного зберігання дати та часу. Параметр точність задає кількість дрібних десяткових знаків, що визначають точність збереження значення в полі SECOND. Якщо цей параметр опускається, за промовчанням його значення для стовпців типу TIME приймається рівним нулю (тобто зберігаються цілі секунди), тоді як для полів типу TIMESTAMP він приймається рівним 6 (тобто позначки часу зберігаються з точністю до мілісекунд). Наявність ключового слова WITH TIME ZONE визначає використання полів TIMEZONE HOUR та TIMEZONE MINUTE, тим самим задаються година та хвилини зсуву зонального часу по відношенню до універсального координатного часу (Гринвічського часу).

Дані типу INTERVAL використовуються для подання періодів часу.

Поняття домену

Домен – це набір допустимих значень одного чи кількох атрибутів. Якщо в таблиці бази даних або в декількох таблицях присутні стовпці, що володіють одними й тими самими характеристиками, можна описати тип такого стовпця та його поведінку через домен, а потім поставити у відповідність кожному з однакових стовпців ім'я домену. Домен визначає всі потенційні значення, які можуть бути надані атрибуту.

Стандарт SQL дозволяє визначити домен за допомогою наступного оператора:

::= CREATE DOMAIN ім'я_домену [AS] тип_даних [ DEFAULT значення] [ CHECK (допустимі_значення)]

Кожному домену, що створюється, надається ім'я, тип даних, значення за замовчуванням і набір допустимих значень. Слід зазначити, що наведений формат операторає неповним. Тепер під час створення таблиці можна вказати замість типу даних ім'я домену.

Видалення доменів з бази даних здійснюється за допомогою оператора:

DROP DOMAIN name_domain [ RESTRICT CASCADE]

У разі вказівки ключового слова CASCADE будь-які стовпці таблиць, створені з використанням домену, що буде видалено, будуть автоматично змінені і описані як містять дані того типу, який був зазначений у визначенні домену, що видаляється.

Альтернативою доменів у середовищі SQL Server є типи даних користувача.

Типи даних, що використовуються в SQL-сервері

Системні типи даних

Один із основних моментів процесу створення таблиці – визначення типів даних для її полів. Тип даних поля таблиці визначає тип інформації, яка розміщуватиметься у цьому полі. Поняття типу даних у SQL Server цілком адекватно поняттю типу даних у сучасних програмування. SQL-сервер підтримує багато різних типів даних: текстові, числові, двійкові (див. таблицю 2.2).

Наведемо короткий огляд типів даних SQL Server.

Для зберігання символьної інформації використовуються символьні типи даних, до яких належать CHAR (довжина), VARCHAR (довжина), NCHAR (довжина), NVARCHAR (довжина). Останні два призначені для зберігання символів Unicode. Максимальне значення довжини обмежено 8000 символами (4000 – для символів Unicode).

Зберігання символьних даних великого обсягу (до 2 Гб) здійснюється за допомогою текстових типів даних TEXT та NTEXT.

До цілих типів даних відносяться INT (INTEGER), SMALLINT, TINYINT, BIGINT. Для зберігання даних цілого чисельного типу використовується, відповідно, 4 байти (діапазон від -2 31 до 2 31 -1), 2 байти (діапазон від -2 15 до 2 15 -1), 1 байт (діапазон від 0 до255) або 8 байт (діапазон від -263 до 263-1). Об'єкти і вирази цілого типу можуть застосовуватися в будь-яких математичних операціях.

Числа, у складі яких є десяткова точка, називаються нецілочисельними. Нецілочисленні дані поділяються на два типи – десяткові та приблизні.

До десяткових типів даних відносяться типи DECIMAL [(точність [, масштаб])] або DEC і NUMERIC [ (точність [, масштаб])]. Типи даних DECIMAL та NUMERIC дозволяють самостійно визначити формат точності числа з плаваючою комою. Параметр точність вказує максимальну кількість цифр даних цього типу (до і після десяткової точки в сумі), а параметр масштаб – максимальна кількість цифр, розташованих після десяткової точки. У звичайному режимі сервер дозволяє вводити трохи більше 28 цифр, які у типах DECIMAL і NUMERIC (від 2 до 17 байт).

До приблизних типів даних відносяться FLOAT (точність до 15 цифр, 8 байт) та REAL (точність до 7 цифр, 4 байти). Ці типи представляють дані форматі з плаваючою комою, тобто. для представлення чисел використовується мантиса і порядок, що забезпечує однакову точність обчислень незалежно від того, наскільки мало чи велике значення.

Для зберігання інформації про дату та час призначені такі типи даних, як DATETIME та SMALLDATETIME, що використовують для представлення дати та часу 8 та 4 байти відповідно.

Типи даних MONEY та SMALLMONEY уможливлюють зберігання інформації грошового типу; вони забезпечують точність значень до 4 знаків після коми і використовують 8 та 4 байти відповідно.

Тип даних BIT дозволяє зберігати один біт, який набуває значення 0 або 1.

У SQL Server реалізовано ряд спеціальних типів даних.

Тип даних TIMESTAMP застосовується якіндикатора зміни версії рядка у межах бази даних.

Тип даних UNIQUEIDENTIFIER використовується для зберігання глобальних унікальних ідентифікаційних номерів.

Тип даних SYSNAME призначений для ідентифікаторів об'єктів.

Тип даних SQL_VARIANT дозволяє зберігати значення будь-якого з підтримуваних SQL Server типів даних за винятком TEXT, NTEXT, IMAGE та TIMESTAMP.

Тип даних TABLE, подібно до тимчасових таблиць, забезпечує зберігання набору рядків, призначених для подальшої обробки. Тип даних TABLE може застосовуватися лише визначення локальних змінних і повертаних користувальницькими функціями значень. Приклад використання типу даних TABLE наведено у лекції, присвяченій функцій користувача.

Тип даних CURSOR потрібен для роботи з такими об'єктами, як курсори, і може бути затребуваний тільки для змінних та параметрів процедур, що зберігаються. Курсори SQL Server є механізмом обміну даними між сервером і клієнтом. Курсор дозволяє клієнтським додаткам працювати не з повним набором даних, а лише з одним або кількома рядками. Приклади використання даних типу CURSOR ми розглянемо в лекціях, присвячених курсорам і процедурам, що зберігаються.