Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
OBDZ5_Lect_12.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
118 Кб
Скачать
☆

Недоліки стандартів sql

1. Невідповідність реляційної моделі даних

Творець реляційної моделі даних Едгар Кодд, Крістофер Дейт та їхні прихильники указують на те, що SQL не є істинно реляційною мовою. Зокрема вони указують на такі проблеми SQL[3]:

  • Рядки, що повторюються

  • Невизначені значення (null)

  • Явна вказівка порядку стовпчиків зліва направо

  • Стовпці без імені та імена стовпчиків, що дублюються

  • Використання покажчиків

  • Висока надлишковість

У опублікованому Крістофером Дейтом і Г'ю Дарвеном Третьому Маніфесті вони висловлюють принципи СУБД наступного покоління і пропонують мову Tutorial D, яка є достовірно реляційною.

2. Складність

Хоча SQL і замислювався, як засіб роботи кінцевого користувача, врешті-решт він став настільки складним, що перетворився на інструмент програміста.

3. Відступи від стандартів

Незважаючи на наявність міжнародного стандарту ANSI SQL-92, багато компаній, СУБД (наприклад, Oracle, Sybase, Microsoft, MySQL), що займаються розробкою, вносять зміни до мови SQL, вживаної в розроблених ними СУБД, тим самим відступаючи від стандарту. Таким чином з'являються специфічні для кожної конкретної СУБД діалекти мови SQL.

4. Складність роботи з ієрархічними структурами

Раніше SQL не пропонував стандартного способу маніпуляції деревовидними структурами. Деякі постачальники СУБД пропонували свої рішення. Наприклад, Oracle використовує вираз CONNECT BY.

Процедурні розширення

Оскільки SQL не є мовою програмування (тобто не надає засобів для автоматизації операцій з даними), введені різними виробниками розширення стосувалися в першу чергу процедурних розширень. Це збережені процедури (англ. stored procedures) і процедурні мови-«надбудови». Практично в кожній СУБД застосовується своя процедурна мова. Подібні мови для найпопулярніших СУБД приведені в такій таблиці:

СУБД

Коротка назва

Розшифровка

Borland InterBase/ Firebird

PSQL

Procedural SQL

IBM DB2

SQL PL

SQL Procedural Language (розширює SQL/PSM)

Microsoft SQL Server/ Sybase ASE

Transact-SQL

Transact-SQL

MySQL

SQL/PSM

SQL/Persistent Stored Module

Oracle

PL/SQL

Procedural Language/SQL (заснований на мові Ada)

PostgreSQL

PL/pgSQL

Procedural Language/PostgreSQL Structured Query Language (схожий на Oracle PL/SQL)

Коротко про стандарт sql:2003

Запис SQL-операторів

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

Ідентифікатори мови SQL призначені для позначення об'єктів в базі даних і є іменами таблиць, уявлень, стовпців і інших об'єктів бази даних. Символи, які можуть використовуватися в створюваних користувачем ідентифікаторах мови SQL, повинні бути визначені як набір символів. Стандарт SQL задає набір символів, який використовується за умовчанням, - він включає рядкові і прописні букви латинського алфавіту (А-Я, AZ), цифри (0-9) і символ підкреслення (_). На формат ідентифікатора накладаються наступні обмеження:

  • ідентифікатор може мати довжину до 128 символів;

  • ідентифікатор повинен починатися з букви;

  • ідентифікатор не може містити пробіли.

<ідентифікатор>::=<буква>

{<буква>|<цифра>}[,...n]

Більшість компонентів мови не чутливі до регістру. Оскільки у мови SQL вільний формат, окремі SQL-оператори і їх послідовності будуть мати більш читаний вигляд при використанні відступів і вирівнювання.

Мова, в термінах якого дається опис мови SQL, називається метамовою. Синтаксичні визначення зазвичай задають за допомогою спеціальної металінгвістічна символіка, звана Бекуса-Науера формулами (БНФ). Прописні букви використовуються для запису зарезервованих слів і повинні вказуватися в операторах точно так, як це буде показано. Рядкові букви вживаються для запису слів, що визначаються користувачем. Застосовувані в нотації БНФ символи і їх позначення показані в таблиці.

Таблиця 5.1. Символи в нотації БНФ

Символ

Позначення

::=

Рівне за визначенням

|

Необхідність вибору одного з декількох наведених значень

<…>

Описана за допомогою метамови структура мови

{…}

Обов'язковий вибір деякої конструкції зі списку

[…]

Необов'язковий вибір деякої конструкції зі списку

[,…n]

Необов'язкова можливість повторення конструкції від нуля до декількох разів

Типи даних мови SQL, визначені стандартом

Дані - це сукупна інформація, що зберігається в базі даних у вигляді одного з кількох різних типів. За допомогою типів даних встановлюються основні правила для даних, що містяться в конкретному стовпчику таблиці, в тому числі розмір виділюваної для них пам'яті.

У мові SQL є шість скалярних типів даних, визначених стандартом. Їх короткий опис представлено в таблиці.

Таблиця 5.2. Символи в нотації БНФ

Тип даних

Оголошення

Символьний

CHAR | VARCHAR

Бітовий

BIT | BIT VARYING

Точні числа

NUMERIC | DECIMAL | INTEGER | SMALLINT

Округлені числа

FLOAT | REAL | DOUBLE PRECISION

Дата/час

DATE | TIME | TIMESTAMP

Інтервал

INTERVAL

<символьний_тип>::=

{ CHARACTER [ VARYING][довжина] | [CHAR | VARCHAR][ довжина]}

<бітовий_тип>::=

BIT [VARYING][довжина]

<фіксований_тип>::=

{NUMERIC[точність[,маштаб]]|{DECIMAL|DEC}

[точність[, маштаб]]

| {INTEGER |INT}| SMALLINT}

<дійсний_тип>::=

{ FLOAT [точність]| REAL |DOUBLE PRECISION}

<тип_дати/часу>::=

{DATE | TIME[точність][WITH TIME ZONE]| TIMESTAMP[точність][WITH TIME ZONE]}

Поняття домену

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

Стандарт SQL дозволяє визначити домен за допомогою наступного оператора:

<домен>::=

CREATE DOMAIN ім’я_домену [AS]

тип_даних

[ DEFAULT значення]

[ CHECK (допустимі_значення)]

Кожному створюваному домену присвоюється ім'я, тип даних, значення за замовчуванням і набір припустимих значень. Слід зазначити, що наведений формат оператора є неповним. Тепер при створенні таблиці можна вказати замість типу даних ім'я домену.

Видалення доменів з бази даних виконується за допомогою оператора:

DROP DOMAIN ім’я_домену [ RESTRICT | CASCADE]

У разі зазначення ключового слова CASCADE будь стовпці таблиць, створені з використанням видаляється домену, будуть автоматично змінені і описані як містять дані того типу, який був вказаний у визначенні видаляється домену.

Альтернативою доменам в середовищах SQL Server і Oracle є користувальницькі типи даних.

Базовий синтаксис деяких основних операторів

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]