Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Створення та модифікація об.doc
Скачиваний:
2
Добавлен:
01.04.2025
Размер:
171 Кб
Скачать
☆

2 Особливості sql-технології

Доступ користувача до даних БД може здійснюватися за різними архітектурами, але на поточний момент часу найпоширенішою з цих архітектур є архі­тектура клієнт ó SQL-сервер.

SQL-сервер має фізичну і логічну структуру.

Фізична структура сервера БД – це метод, за допомогою якого SQL-сервер зберігає свої дані в ОС:

  1. без буферизації, коли сервер БД працює з даними на окремому розділі диска, дос­туп до якого цілком керується сервером;

  2. з буферизацією засобами ОС, тобто сервер тримає свої дані у файлах.

Спосіб без буферизації швидше, тому що сервер БД працює в обхід файлової системи пря­мо з розділом; але в цьому випадку користувач прив'язаний до засобів перевір­ки, відлагодження і резервування даних у комплекті СКБД, тому що формат такого роз­ділу – таємниця. Він застосовується для роботи з OLTP1. OLTP - це такий спосіб орга­нізації роботи СКБД, при якому система працює з транзакціями невеликими за розмі­ра­ми, що ідуть великим потоком, і при цьому клієнту потрібен від системи максимально швидкий час відповіді (прикладом може служити процесінговый центр банку по опера­ціях із платіжними картами).

Спосіб з буферизацією повільніше, але більш зручний у роботі, тому що усі дані лежить у звичайних файлах, які можна резервувати тими методами, яким користувач довіряє. Він застосовується для роботи з DSS2. Ці системи характеризуються тим, що в них переважають масовані вибірки по великому обсязі даних у режимі "тільки чи­тання" (наприклад, програмне забезпечення на основі СКБД для фінансового аналізу, чисельних методів оцінки ділової активності й інших характеристик за великі періоди часу).

Є ще декілька специфічних прикладень, у яких працюють сервери БД. До них відносяться:

  1. BPS (Batch Processіng System) - системи пакетної обробки, у якій є черга завдань, що виконуються з повним доступом до ресурсів і максимальною ефектив­ніс­тю;

  2. MMS (Multі Medіa Server), де сервер використовується для надання користувачам доступу до аудіо- і відео-інформації. Задача сервера БД у даному випадку - забезпечення безперервності мультимедійного потоку для уникнення ривків відео і переривання звуку аж до рівня передачі у канал.

У кожнім з цих випадків потрібно виконання настроювання сервера і встановлення до­даткових модулів сервера БД, що реалізують такі можливості. 

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

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

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

Програмний модуль – це процедурне розширення SQL, що використовується для написання збережених процедур і тригерів. Збережена процедура це деякий відкомпі­льований код, що лежить безпосередньо на сервері БД і використовується у міру потре­би прикладеннями. Переваги централізованого збереження очевидні - у випадку зміни логіки процедури, вона перекомпілюється тільки на сервері. Клієнтські програми при цьому не змінюються. Крім того, використання збережених процедур збільшує продуктивність системи, тому що часто використовуваний код сервер БД розташовує у кэші.

Синонім - це аліас (посилання на об'єкт) для таблиці чи представлення. Він ви­ко­ристовується для того, щоб сховати реальне ім'я об'єкта, забезпечення загального дос­тупу до об'єкта, прозорості доступу до об'єктів віддаленої БД. Короткий приклад. Нехай прикладення працює з деякою таблицею ABC, для якої у системі визначено синонім XYZ (наприклад, ABC@ rhka.org, що вказує її місце розташування на сервері rhka.org). Припустимо, адміністратор вирішив перенести таблицю на інший сервер center.com. Щоб не переписувати клієнтські програми адміністратор перестворює синонім XYZ на ABC@center.com. Клієнтські програми в цьому випадку працюють з даними з іншого сервера.

Індекс створюється для прискореного пошуку по таблиці. SQL-сервер цілком керує індексом при операціях з таблицею (видалення/вставка/модифікація) і немає необхідності спеціально корегувати індекс. Більше того, при обробці запиту SQL-сервер сам може обирати придатний індекс із доступних для даної таблиці. Наприклад, таблиця XYZ містить стовпці A,B,C,D,E,F,G і має 3 індекси: Œ - по полях A,B,C,  - по полях D,E,F і Ž - по полях F,G. При SQL-запиті select a,b,c from xyz буде задіяно перший індекс, а при запиті select f,g from xyz буде задіяно третій індекс.

Кластер. Припустимо, що є група незалежних таблиць, між якими є деякий логіч­ний зв'язок. Наприклад, одна таблиця містить характеристики клієнтів, друга містить опис замовлень цих клієнтів. Наявність зв'язку приводить до того, що ймовірність одно­часного запиту даних з декількох таблиць цієї групи дуже велика. У випадку якщо таблиці великі по розмірах, то при окремому їх збереженні на диску, сумарний час запиту також буде великим. Щоб цього уникнути застосовується зв'язування таблиць у класте­ри. У кластері рядки з різних таблиць чергуються. Таке збереження призводить до того, що сумарний час запиту по декількох таблицях істотно зменшується. Для подальшого збільшення швидкості запитів може використовуватися індексування чи хешування кластера.

Послідовність являє собою спеціальний об’єкт БД для генерації послідовних зна­чень. Кожне звернення до послідовності збільшує її поточне значення на крок, обумов­ле­ний при її створенні.

Спілкування із БД відбувається за допомогою стандартизованої мови структуро­ва­­них запитів SQL3, що призначена для побудови запитів, маніпу­ляції даними і струк­турами даних

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

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

  1. Організація даних. SQL надає користувачу можливість змінювати структуру представлення даних, а також встановлювати відносини між елементами БД;

  2. Читання даних. SQL надає користувачу можливість читати дані з БД і користуватися ними;

  3. Обробка даних. SQL надає користувачу чи прикладенню можливість змінювати БД: додавати у неї нові дані, видаляти і поновлювати існуючі у ній дані;

  4. Керування доступом. За допомогою SQL можна обмежити можливості користувача на читання і модифікацію даних, або захистити їх від несанкціонованого доступу.

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

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

Головна особливість SQL-технологій полягає у наявності у сервера БД спеціаль­них засобів контролю цілісності даних, що не залежать від клієнтських програм і при­в'язані безпосередньо до таблиць. При порушенні правил цілісності даних сервер спо­віс­тить клієнта про помилку. До структур контролю цілісності даних відносяться:

  • обмежники, що прив'язані до стовпців;

  • тригери, що можуть бути прив'язані як до стовпців, так і до рядків таблиці.

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

  1. NOT NULL - перевірка на непорожнє значення. NULL - спеціальне поняття, що означає "порожньо".

  2. UNІQUE - перевірка на унікальність. Значення, що вставляється, повинне бути унікальним для стовпця по всій таблиці. Може містити порожні значення.

  3. PRІMARY KEY - первинний ключ. Значення у стовпці вважається первинним ключем, якщо воно непорожнє і є унікальним у межах стовпця таблиці. Первинний ключ може бути складеним і являти собою комбінацію стовпців.

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

Обмеження посилальної цілісності не дозволяє значенням зі стовпця однієї таблиці приймати значення крім як із присутніх у стовпці іншої таблиці. Це робиться за допомогою обмежників FOREІGN KEY (зовнішній ключ) і REFERENCES (покажчик посилання). Таблиця, що містить FOREІGN KEY, вважається батьківською таблицею, а таблиця, що містить REFERENCES, вважається дочірньою таблицею. FOREІGN KEY - призначає стовпець чи комбінацію стовпців у батьківській таблиці як зовнішній ключ для посилання з інших таблиць. REFERENCES - батьківський ключ, який указує на стовпець (комбінацію стовпців) у батьківській таблиці, що обмежує значення у поточній (дочірній) таблиці. Для використання обмежень посилальної цілісності повинні виконуватися деякі умови. Зокрема , батьківська і дочірня таблиці повинні знаходитися в межах одного апаратного сервера бази даних, вони не можуть знаходитися на різних вузлах розподіленої бази даних. Обмеження посилальної цілісності використовуються при каскадному видаленні, тобто при видаленні запису в батьківській таблиці віддаляються всі записи з зазначеним ключем з дочірніх таблиць, і навпаки при забороні видалення/модифікації, тобто при наявності залежних записів у дочірніх таблицях, значення ключа запису у батьківській таблиці не можна видалити чи модифікувати.

Перевірка фіксованої умови (CHECK). У даному обмежнику явно вказується умова, що повинна виконуватися для значення у стовпці, що вставляється чи модифіку­єть­ся. Наприклад: check (user іn 'ALEX',' JUSTAS') - у стовпці user можуть міститися тільки значення 'ALEX' і 'JUSTAS', спроба вставки значення 'SHTІRLІTZ' буде інтерпретовано як помилкову, check (user_salary between 1000 and 5000) - стовпець user_salary може прийма­ти цілочисельні значення у діапазоні від 1000 до 5000 і т.д. При формуванні умов мо­жуть використовуватися функції, наприклад check (user = upper(user)), у даному випадку ім'я користувача повинне вводитися тільки у верхньому регістрі. Звичайно обмежники задаються при створенні таблиць, але їх можна змінювати за допомогою команд СКБД.

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

  • прозорий аудит (не залежний від клієнтських програм і невидимий для них) і ре­єстрація подій, зв'язаних з доступом до визначених таблиць чи стовпців у таблицях;

  • генерація значень у стовпцях на основі значень в інших стовпцях при вставці / модифікації рядка даних;

  • маніпуляції над залежними таблицями, особливо якщо вони знаходяться на інших вузлах РБД, чого не можна зробити за допомогою обмежників.

Основна вимога до багатокористувацької СКБД - забезпечення несуперечності даних у системі при збереженні максимальної продуктивності і конкуренції користува­чів у доступі до даних. Конкуренція в доступі до даних означає, що кожний з користувачів є незалежним від інших користувачів. Система, щоб уникнути псування даних, самостійно встановлює черговість роботи з даними для користувачів. Крім того, сервер повинний запобігати взаємній руйнації даних при одночасній маніпуляції з даними декількох користувачів. Обробка даних у багатокористувацької СКБД базується на декількох принципах:

1.    Атомарність SQL-виразів, тобто незмінність з фіксацією у часі набору даних, з якими цей вираз працює на всьому протязі свого виконання.

2.    Паралельне виконання операцій при використанні багатопроцесорних систем що дозволяє вирівняти навантаження між різними процесорами і зменшити час від­повіді системи.

3.    Забезпечення максимальної продуктивності. З метою скорочення часу різних користувачів на маніпуляції з даними використовується ряд наступних методів:

a.    процеси, що виконують читання блоків даних, ніколи не очікують процесів, що виконують запис тих же блоків даних;

b.    процеси, що виконують запис блоків даних, при відсутності явних блокувань з боку користувача, не очікують процесів, що виконують читання тих же блоків даних;

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

4.    Транзакції. Транзакція - це логічна одиниця роботи, що складається з одного чи декількох SQL-виразів. Група виразів, визначена як транзакція розглядається як єдина і неподільна дія. У випадку, якщо в одному з виразів обробки даних відбу­вається помилка, те транзакція скасовується цілком. Таким чином, система повертається в стан, попередній початку транзакції, забезпечуючи при цьому фізичну і логічну несуперечність даних. Сервер зберігає інформацію про стани об'єктів у спеціальних файлах - журналах транзакцій. Якщо транзакцію підтверджено (неявно чи по команді COMMІТ) всі зміни даних реально відбуваються і інформація про транзакцію видаляється з журналу транзакцій. Для полегшення керування даними існує можливість завдання так званих проміжних точок збереження по команді SAVEPOІNT <ім'я_точки>. По команді ROLLBACK <ім'я_точки> SQL-сервер відкочує систему до зазначеної точки, відновлюючи стан даних.

5.    Блокування застосовуються для того щоб користувачі не спотворювали взаємно використовуваний дані. SQL-сервери мають спеціальні способи виявлення і запо­бі­гання взаємних блокувань (deadlocks), що можуть займати ресурси СУБД на невизначений час. Види блокувань і засоби їх забезпечення залежать від реалізації сервера.

6.    Політика безпеки. SQL-сервери мають засобу відстеження доступу до корпоративної інформації, безконтрольне використання якої може заподіяти серйозна шкода. В СКБД ця задача вирішується за допомогою ідентифікації користувачів, роздачі їм прав доступу до об'єктів БД, а також за допомогою паролів і аудита доступу до об'єктів БД. Щоб не призначати кожному користувачу велику кількість прав доступу до кожної з груп таблиць у системі, формується список, у якому всі ці права перелічуються. Сукупність таких прав називаються роллю доступу.