Дані цього типу зберігаються у вигляді рядків фіксованої довжини у розподіленій для цього області розміром 8 Кбайт. Додаткові області чи сторінки по 8 Кбайт динамічно додаються і об’єднуються разом. Якщо для вставки даних у стовпчик, для якого визначений тип текст, використовувати оператор INSERT, обов’язково дані заключають в одинарні лапки.
Тип NTEXT
Передбачений для зберігання символів у форматі UNICODE. Основна відмінність – для збереження символів Юнікод потрібно 2 байти, отже у стовпці типу NTEXT можна зберегти лише половину від максимально можливої кількості симовлів для типу ТЕКСТ.
Тип IMAGE
Можна використовувати для зберігання двійкових даних, розміром від 1 до близько 2,2 ГБ. Наприклад, в одному значенні стовпця можна зберігати фотографії співробітників, картинки для каталогу тощо. Дані, як правило, не вводяться за допомогою команди INSERT
Дані зберігаються у вигляді елементів фіксованої довжини на діл’янці пам’яті розміром 8 КБ. Дані типу IMAGE не передбачені для виводу безпосередньо на екран. Для цього потрібно використовувати спеціальну програму.
Дозволяє зберігати грошові значення. Дані цього типу фізично зберігаються у вигляді двох частин – цілої і доробової.
Розмір: 8 байт.
Діапазон:
Точність: одна десятитисячна
Тип SMALLMONEY
Вужчий діапазон
Розмір: 4 байти
При вводі значень у стовпець таблиці, для якого визначений грошовий тип, необхідно перед першою цифрою поставити знак долара ($) або іншої валюти, визначеної для певного регіона.
Ці типи не є дійсно новими типами даних, такими як у мовах програмування, припустимо масиви чи структури. Створений новий тип можна використовувати для опису стовпців, зручного для користувача. Вводиться новий тип за допомогою функції: sp_addtype у форматі
Sp_addtype phone, ‘char(13)’
Якщо вираз системного типу містить дужки, необхідно взяти його в лапки.
Приклад використання нового типу:
CREATE TABLE my-friends
(id int PRIMARY KEY,
name VARCHAR(20),
phone_num PHONE)
INSERT my_friends (name, phone)
VALUES (‘Pete F’, ‘(408)496-7223’);
Для видалення новоствореного типу: Sp_droptype phone
Якщов стовпці визначений атрибут НУЛЛ, це дозволяє опустити при вводі даних значення даного стовпчика. І напваки, якщо визначений атрибут НОТ НУЛЛ, стовпчик неможна залишати порожнім підчас вставки рядка. За замовчуванням задається останній атрибут. Атрибут визначається при створенні таблиці після зазначення типу стовпця. Напркилад
Create table t
(x int NULL, y char(10) NULLl). Для позначення атрибуту можна використовувати букви верхнього і нижнього регістрів. Атрибут НУЛЛ не допустимий для поля первинного ключа.
Властивість IDENTITY
Окрім опису типу і атрибуту НУЛЛ (НОТ НУЛЛ) для стовпців можна також визначити властивість IDENTITY (автоматичне збільшення значення). Потрібно вказати початкове значення, що автоматично розміщуватиметься у цьому стовпці в першому рядку таблиці, і приріст, який буде додаватися до попереднього значення стовпчика з кожним новим рядком.
IDENTITY(поч зн-ня, крок)
Id int IDENTITY(1, 11);
Цю властивість можна присвоїти стовпцю з типом всі INT, DECIMAL(p,0), NUMERIC(p,0) але ні в якому разі стовпцю з властивістю НУЛЛ. Якщо не вказати параметри для айдентіті, за замовчуванням встановвляться значення (1,1).
Обмежання.
Крім зазаначення безпосередньо типів та розміру полів таблиці можна задавати обмеження з метою забезпечення цілісності таблиці. При створенні таблиці (або, при її зміні), можна накладати обмеження на значення які можуть вводитися в поля. Якщо це зробити, SQL буде відхиляти будь-які значення які порушують критерії які визначені для того чи іншого поля.
CREATE TABLE <table name>
(<column name> <data type> <column constraint>,
<column name> <data type> <column constraint>,);
При розробці таблиці визначається набір потенціальних ключів, тобто тих полів, значення яких однозначно ідентифікують кожен рядок таблиці. Причому з них, як наведено у попередньому прикладі, обирається в якості первинного ключа, для якого неможна використовувати атрибут NULL. Не може бути однакових значень цього поля для різних записів. Первинний ключ забезпечує цілісність даних у стовпцях та є першим кроком до цілісності у всій БД. СКБД створює унікальний індекс для стовпця первинного ключа. Якщо Ви не хочете, щоб створений індекс був кластеризованим, можна використовувати слово NONCLUSTERED при створенні обмеження.
(customer_id INT IDENTITY CONSTRAINT customer_pk PRIMARY KEY NONCLUSTERED NOT NULL,
customer_name VARCHAR(20));
або якщо необхідно додати обмежання до вже створеної таблиці:
ALTER TABLE customers
ADD CONSTRAINT customer_pk PRIMARY KEY (customer_id);
Щодо інших потенціальних ключів, то вони є альтернативними ключами, і для позначення їх унікальності використовують унікальне обмеження (UNIQUE), яке гарантує відсутність дублікатів стовпця.
Унікальне обмеження має ті самі атрибути, що й первинний ключ з трьома відмінностями:
- Унікальний стовпець може одноразово приймати значення NULL;
- Заданим за замовчуванням типом індекса є NONCLUSTERED;
- Одна таблиця може мати більше ніж одне обмеження.
Унікальний стовпець не може бути первинним ключем або входити до його складу.
Приклад:
CREATE TABLE Employees
(Name CHAR(20),
DEPARTMENT VARCHAR(20),
BADGE INTEGER UNIQUE);
Можна визначити групу полів як унікальну за допомогою команди обмеження таблиці — UNIQUE. Оголошення унікальності групи означає не унікальність значень складових цієї групи, а унікальність їх комбінації. Наприклад, кожного замовника обслуговує лише один продавець. Це означає, що кожна комбінація номера замовника (cnum) і номера продавця (snum) в таблиці, що створюється нижче повинна бути унікальною.
CREATE TABLE Customers
(cnum integer NOT NULL,
cname char (10) NOT NULL,
city char (10),
rating integer,
snum integer NOT NULL,
UNIQUE (cnum, snum));
Обмежання цілісності за посиланням, або зовнішній ключ
Після створення в одній таблиці поля первинного ключа, значення цього поля можуть використовуватися в іншій таблиці (таблицях) БД для створення істиних тверджень при характеристиці різних сутностей. В інших таблицях це поле вже не є унікальним, має назву поля зовнішнього ключа. FOREIGN KEY пов’язує один або декілька стовпців таблиці з ідентичним номером стовпців іншої таблиці. Його значення не можуть вийти за межі діапазону значень, який у першопочатковій таблиці задається значеннями цього ж поля але вже первинного ключа. Таким чином обмежання FOREIGN KEY використовується лише після створення у відповідній таблиці обмежання PRIMARY KEY для цього є поля. Причому, ці поля не обов’язково повинні мати однакову назв (хоча це бажано), але повинні мати один тип і однакову довжину. Коли в таблиці, де визначено обмежання PRIMARY KEY обновлюються значення стовпців, автоматично обновлюються значення в таблиці, для якої визначено обмежання FOREIGN KEY.
CREATE TABLE Department(Dname CHAR(20),ID_DEP INT Primary key NOT NULL,NUM INT) | CREATE TABLE Employees(Name CHAR(20),ID_DEP INT,BADGE INT)CONSTRAINT dept_id FOREIGN KEY (ID_DEP) REFERENCES Department (id_dep) |
Обмежання СНЕСК (перевірка)
Можна запобігти небажаним або помилковим введенням значень. Для цього використовується обмеження СНЕСК. Воно наклідає умову на значення, що вводиться, які можна ввести в один або декілька стовпців таблиці. Це область з якої стовпець може одержувати свої значення. СНЕСК виражається як булевий вираз, який приймає значення true або false.
У наступному прикладі обмежання СНЕСК визначає для стовпця CITY множину можливих значень і обмежує діапазон можливих значень стовпця Badge (номер службовця):
CREATE TABLE Employee
(Name CHAR(20),
id_DEP INT,
CITY VARCHAR(20)
CHECK (CITY IN (‘London’, ‘Paris’, ‘Rome’, ‘Athens’)),
Badge INT CHECK (Badge<100));
Додамо обмеження для поля номерів телефонів, таке щоб всі вони починалися з одного коду міста (415) та відповідали певному зразку. При цьому залишимо без перевірки ті поля, для яких вже були введені значення, навіть якщо вони не відповідають зразку:
ALTER TABLE myfriends
WITH NOCHECK
ADD CONSTRAINT friends_chk_num CHECK
(pho ne LIKE ‘(415)[0-9] [0-9][0-9] – [0-9][0-9][0-9][0-9]’);
Обмежання DEFAULT (значення за замовчуванням)
Коли ви вставляєте новий рядок у таблицю без вказання одного чи декількох значень чи при введені інформації залишаєте незаповненими поля, SQL повинен мати значення за замовчуванням для заповнення цих пропусків. Найбільш загальним значенням за замовчуванням є — NULL. Це значення за замовчуванням для будь-якого стовпця, якому не надано обмеження NOT NULL.
Значенння DEFAULT вказується в команді CREATE TABLE у той самий спосіб що і обмеження стовпця, хоча, з технічної точки зору, воно не має обмежуючих властивостей — воно не обмежує значення, які можнае вводити, а просто визначає, що може статися, якщо не ввести будь-яке з них. В якості обмеження обирають значення, що найчастіше зустрічається у стопці. Наприклад, в таблиці службовці, більшість робітників з Лондона, тому саме назву цього міста можна обрати значенням за замовчуванням для стовпця СІТУ:
CREATE TABLE Employee
(Name CHAR(20),
id_DEP INT,
CITY VARCHAR(20) DEFAULT ‘London’,
Badge INT CHECK (Badge<100));