Смекни!
smekni.com

Мова запитів SQL (стр. 2 из 2)

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

Тип NTEXT

Передбачений для зберігання символів у форматі UNICODE. Основна відмінність – для збереження символів Юнікод потрібно 2 байти, отже у стовпці типу NTEXT можна зберегти лише половину від максимально можливої кількості симовлів для типу ТЕКСТ.

Тип IMAGE

Можна використовувати для зберігання двійкових даних, розміром від 1 до близько 2,2 ГБ. Наприклад, в одному значенні стовпця можна зберігати фотографії співробітників, картинки для каталогу тощо. Дані, як правило, не вводяться за допомогою команди INSERT

Дані зберігаються у вигляді елементів фіксованої довжини на діл’янці пам’яті розміром 8 КБ. Дані типу IMAGE не передбачені для виводу безпосередньо на екран. Для цього потрібно використовувати спеціальну програму.

Фінансові типи даних. Тип MONEY

Дозволяє зберігати грошові значення. Дані цього типу фізично зберігаються у вигляді двох частин – цілої і доробової.

Розмір: 8 байт.

Діапазон:

Точність: одна десятитисячна

Тип SMALLMONEY

Вужчий діапазон

Розмір: 4 байти

При вводі значень у стовпець таблиці, для якого визначений грошовий тип, необхідно перед першою цифрою поставити знак долара ($) або іншої валюти, визначеної для певного регіона.

Типи даних, визначені користувачем (User-Defined Datatipes)

Ці типи не є дійсно новими типами даних, такими як у мовах програмування, припустимо масиви чи структури. Створений новий тип можна використовувати для опису стовпців, зручного для користувача. Вводиться новий тип за допомогою функції: 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

Атрибути NULL NOT NULL

Якщов стовпці визначений атрибут НУЛЛ, це дозволяє опустити при вводі даних значення даного стовпчика. І напваки, якщо визначений атрибут НОТ НУЛЛ, стовпчик неможна залишати порожнім підчас вставки рядка. За замовчуванням задається останній атрибут. Атрибут визначається при створенні таблиці після зазначення типу стовпця. Напркилад

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 дозволяє не лише створити первинні і зовнішні ключі, визначити унікальні стовпці і рядки, але й вказати обмеження, що використовуються при перевірці допустимих значень даних, а також стандартні значення для стовпців.

CREATE TABLE <table name>

(<column name> <data type> <column constraint>,

<column name> <data type> <column constraint>,);

Обмежання PRIMARY KEY

При розробці таблиці визначається набір потенціальних ключів, тобто тих полів, значення яких однозначно ідентифікують кожен рядок таблиці. Причому з них, як наведено у попередньому прикладі, обирається в якості первинного ключа, для якого неможна використовувати атрибут NULL. Не може бути однакових значень цього поля для різних записів. Первинний ключ забезпечує цілісність даних у стовпцях та є першим кроком до цілісності у всій БД. СКБД створює унікальний індекс для стовпця первинного ключа. Якщо Ви не хочете, щоб створений індекс був кластеризованим, можна використовувати слово NONCLUSTERED при створенні обмеження.

CREATE TABLE customers

(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));