ЗАСОБИ SQL і реляційна модель

Вбудовані типи

У мові SQL передбачені перераховані нижче вбудовані типи, імена яких здебільшого говорять самі за себе

■&nbsp&nbsp&nbsp&nbsp BOOLEAN                                                                                                                          ■ INTEGER

■ BIT [VARYING] (п) ■ SMALLINT

■&nbsp&nbsp&nbsp&nbsp BINARY LARGE OBJECT (n)   ■ FLOAT(p)

■&nbsp&nbsp&nbsp&nbsp CHARACTER [ VARYING ] (n) ■ TIME

■&nbsp&nbsp&nbsp&nbsp CHARACTER LARGE OBJECT(n) ■ DATE

■&nbsp&nbsp&nbsp&nbsp NUMERIC (p,q)                                                                                  ■ TIMESTAMP

■&nbsp&nbsp&nbsp&nbsp DECIMAL (p,q)                                                                                  ■ INTERVAL

Підтримуються численні приємним за умовчанням параметри, скорочення і альтернативні імена, наприклад, CHAR як скорочення від CHARACTER, CLOB-ОТ CHARACTER LARGE OBJECT, BLOB-ОТ BINARY LARGE OBJECT І

ТД; У

даній книзі ці подробиці не розглядаються Нижче наведена найбільш важлива інформація по цій темі

5 Вбудовані типи даних BIT І BIT VARYING були введені в специфікації

SQL: 1992 і мають бути знову вилучені з специфікації SQL: 2003 ()

6 Незважаючи на їхні імена, що містять слово обєкт, типи CLOB і BLOB фактіче скі є строковими (вони не мають ніякого відношення до обєктів у тому сенсі, який розглядається в розділі 25 зокрема, тип BLOB фактично являє собою строковий тип, що складається з байтів або октетів (Він не має нічого спільного з двійковими числами, хоча і містить у своєму повному име ні слово BINARY) Крім того, оскільки значення цих типів можуть бути дуже великі (тому такі значення іноді неформально називають просто довгими рядками),в мові SQL передбачена конструкція, звана локатором (Locator), яка (крім усього іншого) дозволяє забезпечити доступ до окремих фрагментів цих значень

7 Для всіх цих типів передбачені оператори присвоювання і порівняння на ра венство Операція порівняння на рівність по суті виконується дуже просто (але див пункт 5) Оператор присвоювання виглядає приблизно так

SET &lttarget&gt  =  &ltsource&gt  

Безумовно, операції привласнення здійснюються також неявно при виконанні операцій вибірки та оновлення бази даних Але реляционное присвоювання як таке не підтримується Крім того, не підтримується множинне присвоювання, за винятком наступного випадку : якщо рядок г оновлюється за допомогою оператора у наведеній нижче формі

UPDATE T SET C1 = exp1, .., Cn = expn WHERE p

Тут всі вирази expl, .., expn обчислюються до того, як відбувається кожне з окремих присвоювань змінним С1, .., Cn (ar являє собою рядок в результатах обчислення виразу т WHERE p)

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

■ істиннісне значення ■ дата

■ бітова рядок ■ час

■ двійкове значення ■ тимчасова відмітка

■ символьний рядок ■ інтервал рік / місяць

■ числове значення ■ інтервал добу / час доби

11 Ще два винятки коротко описані в главі 9, розділ 912, підрозділ Обмеження базової таблиці і в главі 10, розділ 106, підрозділ Оновлення уявлень. Якщо не вважати цих винятків, автору не відомо ні про одному програмному продукті, представленому на сучасному ринку, який підтримував би множинне присвоювання Але автор вважає, що така підтримка бажана і навіть необхідна і дійсно, вона запланована для включення в специфікацію SQL: 2003, але не для відносин

Перевірка типів відбувається на основі саме таких 10 категорій (це особливо стосується операцій привласнення та перевірки на рівність) Тому, наприклад, спроба порівняти число і символьну рядок є неприпустимою, але спроба порівняти два числа здійсненна, навіть якщо ці числа відносяться до різних числовим типам, скажімо INTEGER і FLOAT (у даному прикладі перед виконанням порівняння значення INTEGER буде приведено до типу FLOAT)

9 Правила перевірки типів є особливо складними стосовно до символьним строковим типам, таким як CHAR (n), CHAR VARYING (П) І CLOB (n) Виклад докладних відомостей з цієї теми виходить за рамки даної книги, але ми повинні коротко розглянути випадок символьних рядків фіксованої довжини (тобто тип CHAR (п)), як описано нижче

■&nbsp&nbsp&nbsp&nbsp Порівняння Якщо порівнюються значення типу CHAR (nl) і CHAR (n2), то більш короткий значення обовязково доповнюється справа пробілами так, щоб його довжина стала рівною довжині довшого значення, і після цього відбувається сравненіе12 Тому, наприклад, рядки Р2 (з довжиною два) і Р2 (з дли ної три) розглядаються при їх порівнянні як рівні

■&nbsp&nbsp&nbsp&nbsp Присвоєння Якщо значення типу CHAR (nl) присвоюється змінної типу CHAR (n2), то перед виконанням операції привласнення значення CHAR (nl) доповнюється справа пробілами при nl < п2 або усікається праворуч при nl> n2 для того, щоб це значення могло мати довжину п2 Вважається помилкою, якщо при будь-якому такому усіканні губляться будь-які непробельний символи

Додаткові пояснення і опису наведені в [420]

Джерело: Дейт К Дж, Введення в системи баз даних, 8-е видання: Пер з англ – М: Видавничий дім «Вільямс», 2005 – 1328 с: Ил – Парал тит англ

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*