Transact-SQL, Створення різних об’єктів баз даних

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

Подання на основі однієї або декількох таблиць баз даних (або уявлень) створюється за допомогою інструкціїCREATE VIEW та інструкції SELECT, яка є невід'ємною частиною інструкції CREATE VIEW. Оскільки створення подання завжди містить запит, інструкція CREATE VIEW належить до мови маніпуляції даними (DML), а не мови опису даних (DDL). Тому створення та видалення уявлень розглядається в одній з наступних статей, після подання інструкцій Transact-SQL для модифікації даних.

ІнструкціяCREATE INDEX створює новий індекс для цієї таблиці. Індекси переважно застосовуються для забезпечення ефективного доступу до даних, що зберігаються на диску. Наявність індексу може значно покращити доступ до даних.

Ще одним додатковим об'єктом бази є процедури, що зберігаються (stored procedure), які створюються за допомогою інструкціїCREATE PROCEDURE. Процедура, що зберігається, - це послідовність інструкцій Transact-SQL, створена за допомогою мови SQL і процедурних розширень.

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

У Database Engine застосовуєтьсятаке ж поняття схеми, як і стандарті ANSI SQL. У стандарті SQL схема визначається як колекція об'єктів бази даних, що має одного власника і формує один простір імен. Простір імен (namespace) – це набір об'єктів із однозначними іменами. Наприклад, дві таблиці можуть мати те саме ім'я тільки в тому випадку, якщо вони знаходяться в різних схемах. Схема є дуже важливим концептом моделі безпеки компонента Database Engine.

Тригером (trigger) називається об'єкт бази даних, який задає певну дію у відповідь певну подію. Це означає, що коли для певної таблиці відбувається певна подія (модифікації, вставка або видалення даних), компонент Database Engine автоматично запускає одну або кілька додаткових дій. Роботу з тригерами, схемами, процедурами, що зберігаються, і індексами ми розглянемо пізніше.

Синонім (synonym) - це локальний об'єкт бази даних, який надає зв'язок між самим собою та іншим об'єктом, керованим тим самим або пов'язаним сервером баз даних. Синоніми об'єктів створюються за допомогою інструкціїCREATE SYNONYM, застосування якої показано на прикладі нижче:

У цьому прикладі створюється синонім таблиці CustomerSet у схемі Production бази даних TestCustomer. Цей синонім можна потім використовувати в інструкціях мови DML, таких як SELECT, INSERT, UPDATE та DELETE.

Синоніми в основному використовуються, щоб уникнути необхідності застосовувати довгі імена в інструкціях DML. Як згадувалося, ім'я об'єкта бази даних може складатися з чотирьох частин. Використання синоніма, що складається з однієї частини, для об'єкта з ім'ям, що складається з трьох або чотирьох частин, дозволяє заощадити час на введенні імені такого об'єкта.

Обмеження длязабезпечення цілісності та домени

Домен (domain) - це набір всіх можливих дозволених значень, які можуть містити стовпці таблиці. Майже у всіх системах управління базами даних визначення таких можливих значень стовпця використовуються такі типи даних, як INT, CHAR і DATE. Такого методу примусового забезпечення "цілісності домену" недостатньо, як можна побачити у наступному прикладі.

Допустимо в таблиці person є стовпець zip, в якому вказується індекс міста, в якому проживає ця особа. Тип даних цього стовпця можна визначити як SMALLINT чи CHAR(5). Визначення типу даних стовпця як SMALLINT буде неточним, тому що цей тип даних містить усі позитивні та негативні цілі числа в діапазоні від -215 до 215-1. Оголошення з використанням типу даних CHAR(5) буде ще менш точним, оскільки в такому випадку можна буде використовувати всі буквено-цифрові та спеціальні символи. Тому для точного визначення даних стовпця індексів потрібно діапазон позитивних значень від 00601 та 99950.

Більш точно цілісність домену можна примусово забезпечити за допомогою обмежень CHECK (визначені в інструкції CREATE TABLE або ALTER TABLE), завдяки їх гнучкості та тому, що вони завжди примусово застосовуються при вставці або модифікації даних стовпця.

Мова Transact-SQL підтримує домени за допомогою псевдонімів типів даних за допомогою інструкціїCREATE TYPE. Розгляд псевдонімів типів даних і типів даних середовища CLR присвячені наступні два розділи.

Псевдоніми типів даних

Псевдонім типу даних (alias data type) - це спеціальний вид типу даних, що визначається користувачем під час використання існуючих базових типів даних. Такий тип данихможна використовувати в інструкції CREATE TABLE для визначення одного чи більше стовпців таблиці.

Для створення псевдонімного типу даних зазвичай використовується інструкція CREATE TYPE. Далі показано синтаксис цієї інструкції для визначення псевдоніму типу даних:

Використання інструкції CREATE TYPE для створення типу даних показано в наведеному нижче прикладі:

У цьому коді створюється псевдонімний тип Zip даних на основі стандартного типу даних SMALLINT. Тепер цей певний користувачем тип даних можна присвоїти стовпцю таблиці, як показано в прикладі нижче:

Тут тип даних шпальти ZipCode таблиці Customer визначається псевдонімом типу даних Zip. Допустимі значення цього стовпця потрібно обмежити діапазоном цілих значень від 600 до 99950. Як можна бачити в прикладі, це обмеження можна накласти за допомогою пропозиції CHECK.

Зазвичай компонент Database Engine неявно перетворює різні типи даних сумісних стовпців. Це також стосується псевдонімних типів даних. Починаючи з версії SQL Server 2008, стали підтримуватися табличні типи, що визначаються користувачем. У наведеному нижче прикладі показано створення такого типу за допомогою інструкції CREATE TYPE.

Табличний тип даних User_table_t, що визначається користувачем, має два стовпці: name і salary. Основна синтаксична відмінність табличних типів від псевдонімних полягає в наявності пропозиціїAS TABLE, як це можна бачити в прикладі. Визначаються користувачем табличні типи зазвичай застосовуються з параметрами, що повертають табличні значення.

Типи даних CLR

Інструкцію CREATE TYPE можна також застосувати для створення визначених користувачем типів даних із використанням .NET. У цьому випадку, реалізація визначеного користувачем типу визначається вклас зборки в середовищі CLR. Це означає, що для реалізації нового типу даних можна використовувати одну з мов .NET, таку як C# або Visual Basic.