Створення таблиць за допомогою SQL-запитів

Зміст

Створення таблиць за допомогою SQL Висновок

На цьому уроці ми познайомимося ще з однією можливістю створення таблиць через посилку SQL-запитів. Як Ви, напевно, могли помітити на попередньому уроці, Database Desktop не має всіх можливостей з управління SQL-серверними базами даних. Тому за допомогою Database Desktop зручно створювати або локальні бази даних або тільки найпростіші SQL-серверні бази даних, що складаються з невеликої кількості таблиць, не дуже пов'язаних один з одним. Якщо Вам необхідно створити базу даних, що складається з великої кількості таблиць, що мають складні взаємозв'язки, можна скористатися мовою SQL (взагалі кажучи, для цих цілей найкраще використовувати спеціалізовані CASE-засоби, які дозволяють в інтерактивному режимі згенерувати всю структуру бази даних і сформувати все зв'язку;опис двох найбільш вдалих CASE-засобів - System Architect і S-Designor - дано у додаткових уроках). При цьому можна скористатися компонентом Query в Delphi, щоразу посилаючи по одному SQL-запиту, а можна записати всю послідовність SQL-пропозицій в один так званий скрипт і надіслати його на виконання, використовуючи, наприклад, Windows Interactive SQL (WISQL.EXE) - інтерактивний засіб посилки SQL-запитів до InterBase (у тому числі і локального InterBase), що входить до Delphi. Звичайно, для цього потрібно добре знати мову SQL, але запевняю Вас, складного в цьому нічого немає! Конкретні реалізації мови SQL трохи відрізняються в різних SQL-серверах, проте базові пропозиції залишаються однаковими для всіх реалізацій. Практика показує, що якщо немає необхідності створювати таблиці під час виконання програми, краще скористатися WISQL.

Створення таблиць за допомогою SQL

Якщо ви бажаєте скористатися компонентом TQuery , спочатку помістіть його на форму. Після цього налаштуйте властивість DatabaseName на потрібний Вам аліас (якщо бази даних ще не існує, зручніше створити її у WISQL командою FileCreate Database. а потім вже налаштувати на неї новий аліас). Після цього можна ввести SQL-пропозицію як SQL . Для виконання запиту, щозмінює структуру,вставляєабо оновлює дані на сервері, потрібно викликати методExecSQL компонента TQuery . Для виконання запиту, що отримує дані з сервера (тобто запиту, в якому основним є оператор SELECT), потрібно викликати метод Open компонента TQuery . Це пов'язано з тим, що BDE при надсиланні запиту типу SELECT відкриває так званий курсор , за допомогою якого здійснюється навігація з вибірки даних (докладніше про це див в уроці, присвяченому TQuery ).

Як показує досвід, простіше скористатися утилітою WISQL. Для цього у WISQL виберіть команду FileRun an ISQL Script. і виберіть файл, у якому записано ваш скрипт, який створює базу даних. Після натискання кнопки “OK” ваш скрипт буде виконано, і у нижньому вікні буде виведено протокол його роботи.

Наведемо спрощений синтаксис SQL-пропозиції для створення таблиці на SQL-сервері InterBase (повніший синтаксис можна подивитися в online-довіднику з SQL, що поставляється з локальним InterBase):

CREATE TABLE table

table - ім'я створюваної таблиці,

- опис обмежень та/або ключів (квадратні дужки [] означають необов'язковість, вертикальна риса означає “або”).

Опис поля складається з найменування поля та типу поля (або домену - див. урок 9), а також додаткових обмежень, що накладаються на поле:

datatype - будь-який правильний тип SQL-сервера (дляInterBase такими типами є - див. урок 11 - SMALLINT, INTEGER, FLOAT, DOUBLE PRECISION, DECIMAL, NUMERIC, DATE, CHAR, VARCHAR, NCHAR, BLOB), символьні типи можуть мати CHARACTER SET - набір символів. Для української мови слід встановити набір символів WIN1251;

COMPUTED BY ( ) - Визначення обчислюваного на рівні сервера поля, де - правильне SQL-вираз, що повертає єдине значення;

domain - ім'я домену (узагальненого типу), визначеного у базі даних;

DEFAULT – конструкція, що визначає значення поля за умовчанням;

NOT NULL – конструкція, що вказує на те, що поле не може бути порожнім;

COLLATE - пропозиція, яка визначає порядок сортування для вибраного набору символів (для поля типу BLOB не застосовується). український набір символів WIN1251 має 2 порядки сортування - WIN1251 та PXW_CYRL. Для правильного сортування, яке включає великі літери, слід вибрати порядок PXW_CYRL.

Опис обмежень та/або ключів включає пропозиції CONSTRAINT або пропозиції, що описують унікальні поля, первинні, зовнішні ключі, а також обмеження CHECK (такі конструкції можуть визначатися як на рівні поля, так і на рівні таблиці в цілому, якщо вони зачіпають кілька полів ):

= (col[,col.]) FOREIGN KEY (col[,col.]) REFERENCES other_table

[NOT] BETWEEN AND

[NOT] LIKE [ESCAPE ]

NULL USER RDB$DB_KEY > [COLLATE collation]

= num "string" charsetname "string"

COUNT (* [ALL] DISTINCT )

SUM ([ALL] DISTINCT )

AVG ([ALL] DISTINCT )

MAX ([ALL] DISTINCT )

MIN ([ALL] DISTINCT )

= вираз SELECT по одному полю, яке повертає точно одне значення.

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

Приклад A: Проста таблиця з конструкцією PRIMARY KEY на рівні поля

CREATE TABLE REGION (

REGION REGION_NAME NOT NULL PRIMARY KEY,

POPULATION INTEGER NOT NULL);

Передбачається, що в базі даних визначено домен REGION_NAME , наприклад, так:

CREATE DOMAIN REGION_NAME

AS VARCHAR(40) CHARACTER SET WIN1251 COLLATE PXW_CYRL;

Приклад B: Таблиця з пропозицією UNIQUE як на рівні поля, так і на рівні таблиці

CREATE TABLE GOODS (

MODEL SMALLINT NOT NULL UNIQUE,

NAME CHAR(10) NOT NULL,

ITEMID INTEGER NOT NULL, CONSTRAINT MOD_UNIQUE

UNIQUE (NAME, ITEMID));

Приклад C: Таблиця з визначенням первинного ключа, зовнішнього ключа та конструкції CHECK, а також символьних масивів

CREATE TABLE JOB (

JOB_CODE JOBCODE NOT NULL,

JOB_GRADE JOBGRADE NOT NULL,

JOB_REGION REGION_NAME NOT NULL,

JOB_TITLE VARCHAR(25) CHARACTER SET WIN1251 COLLATE PXW_CYRL NOT NULL,

MIN_SALARY SALARY NOT NULL,

MAX_SALARY SALARY NOT NULL,

JOB_REQ BLOB(400,1) CHARACTER SET WIN1251,

LANGUAGE_REQ VARCHAR(15) [5],

PRIMARY KEY (JOB_CODE, JOB_GRADE, JOB_REGION),

FOREIGN KEY (JOB_REGION) REFERENCES REGION (REGION),

Даний приклад створює таблицю, що містить інформацію про роботи (професії). Типи полів засновані на доменах JOBCODE, JOBGRADE, REGION_NAME та SALARY. Визначено масив LANGUAGE_REQ, що складається з 5 елементів типу VARCHAR(15). Крім того, введено поле JOB_REQ , що має типBLOB з підтипом 1 (текстовий блоб) та розміром сегмента 400 . Для таблиці визначено первинний ключ, що з трьох полів JOB_CODE , JOB_GRADE і JOB_REGION . Далі визначено зовнішній ключ ( JOB_REGION ), що посилається на поле REGION таблиці REGION . І, нарешті, включено пропозицію CHECK , що дозволяє проводити перевірку співвідношення для двох полів і викликати винятковий стан у разі порушення такого співвідношення.

Приклад D: Таблиця з обчислюваним полем

Даний приклад створює таблицю, де серед інших полів є обчислюване (фізично не існує) поле NEW_SALARY, значення якого обчислюється за значеннями двох інших полів (OLD_SALARY та PERC_CHANGE).

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

Висновок

Отже, ми розглянули, як створювати таблиці з допомогою SQL-выражений. Цей процес, хоч і не настільки зручний, як інтерактивний засіб Database Desktop, проте має найбільш гнучкі можливості по налаштуванню Вашої системи та управління її зв'язками.