Основи представлень SQL: як вони працюють та їх переваги
Для взаємодії з реляційними базами даних і формування SQL-запитів ми використовуємо мову SQL, або структуровану мову запитів.
Але що ж таке представлення SQL? По суті, це віртуальні таблиці, які об’єднують та зберігають дані з реальних таблиць бази даних, створених вами. Таким чином, ви отримуєте безпечний та спрощений спосіб доступу до даних, приховуючи складні структури та реалізації таблиць.
Як це функціонує? Ви вже знаєте, що для створення представлень SQL використовуються SQL-запити. При створенні представлення SQL зберігається базовий SQL-запит. Коли ви використовуєте SQL-запит для отримання даних з кількох таблиць, запит виконується і допомагає витягнути дані з потрібних таблиць бази даних. Аналогічно, коли ви надсилаєте запит до створеного представлення SQL, спочатку вибирається, а потім виконується збережений запит.
Переваги створення представлень SQL
Оскільки представлення SQL підтримуються збереженими SQL-запитами, вони сприяють захисту вашої бази даних. Крім того, вони спрощують складні запити та підвищують ефективність виконання запитів. Розгляньмо докладніше, як створення представлень SQL може бути корисним для вашої бази даних та ваших програм:
#1. Забезпечення безпеки бази даних
Представлення SQL функціонують як віртуальні таблиці, приховуючи структури реальних таблиць бази даних. Отже, просто подивившись на представлення, неможливо визначити, скільки таблиць задіяно та які існують різні стовпці в таблиці. Додатково, ви можете додати обмеження доступу до своєї бази даних, щоб користувач міг запитувати лише представлення, а не самі таблиці.
#2. Спрощення складних запитів
Часто ваші SQL-запити охоплюють кілька таблиць зі складними умовами з’єднання. Якщо ви часто використовуєте такі складні запити, створення представлень SQL стане в нагоді. Ви можете зберегти свій складний запит у своєму представленні SQL. Таким чином, ви зможете просто запитувати представлення, а не запускати весь складний запит.
#3. Захист від зміни структури
У випадку, якщо базова структура таблиці змінюється, наприклад, додаються або видаляються стовпці, представлення залишаються незмінними. Якщо ви покладаєтеся на свої представлення SQL для всіх своїх запитів, вам не потрібно хвилюватися про зміну структури. Оскільки вони є віртуальними таблицями, створене вами представлення SQL продовжить працювати без проблем.
#4. Підвищення продуктивності запитів
Під час створення представлення SQL механізм бази даних оптимізує базовий запит перед його збереженням. Збережений запит виконується швидше, ніж безпосереднє виконання того самого запиту. Тому використання представлень SQL для запиту даних забезпечує кращу продуктивність та швидші результати.
Як створити представлення SQL?
Для створення представлень SQL використовується команда CREATE VIEW. Представлення містить оператор SELECT, який визначає запит, що буде збережено у представленні. Синтаксис виглядає так:
CREATE VIEW view_name AS
SELECT
column_1,
column_2,
column_3...
FROM
table_name_1, table_name_2
WHERE
condition_clause
Розглянемо це на конкретному прикладі. Припустимо, ви створили дві таблиці: “відділ” та “співробітник”. Таблиця “відділ” має назву відділу та його ідентифікатор. Таблиця “співробітник” містить ім’я та ідентифікатор працівника, а також ідентифікатор відділу, до якого він належить. Використаємо ці дві таблиці для створення представлення SQL.
Створення таблиць бази даних
department_id | department_name |
1 | Finance |
2 | Technology |
3 | Business |
Таблиця 1: Відділ
Якщо ви працюєте з MySQL, ви можете створити цю таблицю за допомогою наступного запиту:
CREATE TABLE `department` (
`department_id` int,
`department_name` varchar(255),
PRIMARY KEY (`department_id`)
);
Заповніть таблицю даними за допомогою SQL-інструкцій:
INSERT INTO department VALUES (1, 'Finance');
INSERT INTO department VALUES (2, 'Technology');
INSERT INTO department VALUES (3, 'Business');
employee_id | employee_name | department_id |
100 | John | 3 |
101 | Mary | 1 |
102 | Natalya | 3 |
103 | Bruce | 2 |
Таблиця 2: Співробітник
Після того, як таблиця “відділ” створена та заповнена, створіть таблицю “співробітник” за допомогою наступного запиту MySQL:
CREATE TABLE `employee` (
`employee_id` INT,
`employee_name` VARCHAR(255),
`department_id` INT,
FOREIGN KEY (`department_id`) REFERENCES department(department_id)
);
Далі внесіть дані про співробітників до таблиці. Важливо пам’ятати, що оскільки стовпець `department_id` є зовнішнім ключем, що посилається на таблицю `department`, ви не можете вставити `department_id`, якого немає в іншій таблиці.
INSERT INTO employee VALUES (100, 'John', 3);
INSERT INTO employee VALUES (101, 'Mary', 1);
INSERT INTO employee VALUES (102, 'Natalya', 3);
INSERT INTO employee VALUES (103, 'Bruce', 2);
Запити до таблиць бази даних
Давайте використаємо ці таблиці в запиті до бази даних. Уявіть, що вам потрібно отримати `employee_id`, `employee_name` та `department_name` для всіх співробітників. Для цього вам потрібно використовувати обидві таблиці та з’єднати їх через спільний стовпець `department_id`. Ваш запит виглядатиме наступним чином:
SELECT
employee_id,
employee_name,
department_name
FROM
employee,
department
WHERE
employee.department_id = department.department_id;
Створення представлення SQL
З часом, якщо ви часто звертаєтеся до цих даних, і з ростом кількості записів у таблицях, час виконання запитів може збільшуватися. У такому випадку можна створити представлення SQL, яке відповідає цьому запиту.
Використайте наступний запит для створення представлення з назвою `employee_info`:
CREATE VIEW employee_info AS
SELECT
employee_id,
employee_name,
department_name
FROM
employee,
department
WHERE
employee.department_id = department.department_id;
Тепер ви можете запитувати ці дані безпосередньо через представлення. Ваш запит спроститься до:
SELECT
*
FROM
employee_info;
Запит до представлення SQL повертає такий самий результат, що й оригінальний запит. Проте, ваш запит тепер простіший для підтримки. Представлення приховує складність вашого запиту, не впливаючи на результат або продуктивність.
Як замінити представлення SQL?
Якщо у вас є представлення з певним ім’ям і ви хочете його змінити або замінити, використовуйте команду CREATE OR REPLACE VIEW. За допомогою неї ви можете змінити оператор SELECT, який використовувався для створення представлення. Таким чином, дані вашого представлення будуть оновлені, при цьому ім’я представлення залишиться незмінним. Крім того, ви створите нове представлення SQL, якщо воно ще не існує.
Синтаксис для заміни представлення SQL виглядає так:
CREATE OR REPLACE VIEW view_name AS
SELECT
new_column_1,
new_column_2,
new_column_3 ...
FROM
new_table_name_1,
new_table_name_2 ...
WHERE
new_condition_clause
Розглянемо приклад. Є таблиці “відділ” та “співробітник”, з яких створено представлення SQL `employee_info`, що містить стовпці `employee_id`, `employee_name` та `department_name`.
З міркувань безпеки, ви можете захотіти видалити `employee_id` з цього представлення. Крім того, ви також можете змінити назви стовпців, щоб приховати фактичні стовпці бази даних. Ви можете внести ці зміни до існуючого представлення за допомогою такого SQL-запиту:
CREATE OR REPLACE VIEW employee_info AS
SELECT
employee_name as name,
department_name as department
FROM
employee,
department
WHERE
employee.department_id = department.department_id;
Після заміни представлення, результати запиту будуть відрізнятися від попередніх. Наприклад, в результаті ви побачите, що один із стовпців вилучено. Крім того, назви стовпців змінено з `employee_name` та `department_name` на `name` та `department` відповідно.
Використовуйте переваги представлень SQL
Створення представлень SQL забезпечить вам не тільки спрощені запити та швидший пошук даних, але й безпеку та захист від змін структури. Створення представлень SQL є досить простим процесом. Ви можете взяти будь-який існуючий запит та перетворити його на представлення SQL.
Використовуйте наведений вище покроковий посібник, щоб створювати представлення SQL та користуватися їх перевагами. Завдяки представленням SQL ви зможете зробити ваші програми для роботи з базами даних простішими та безпечнішими, одночасно підвищуючи їхню продуктивність.
Якщо ви бажаєте керувати власним SQL-сервером, зверніть увагу на SQL Server Management Studio (SSMS).