Опис об'єктів бази даних
Окрім таблиць, реляційна база даних може містити інші структури, які допомагають оптимізувати організацію даних, інкапсулювати програмні дії та покращувати швидкість доступу. У цій одиниці ви дізнаєтеся більше про три з цих структур: подання, збережені процедури та індекси.
Що таке подання?
Подання – це віртуальна таблиця на основі результатів запиту SELECT . Подання можна розглядати як вікно для вказаних рядків в одній або кількох базових таблицях. Наприклад, можна створити подання в таблицях "Замовлення " та " Клієнти ", яке отримує дані про замовлення та клієнтів, щоб надати один об'єкт, який дає змогу легко визначити адреси доставки для замовлень:
CREATE VIEW Deliveries
AS
SELECT o.OrderNo, o.OrderDate,
c.FirstName, c.LastName, c.Address, c.City
FROM Order AS o JOIN Customer AS c
ON o.Customer = c.ID;
Ви можете запитувати подання та фільтрувати дані так само, як і в таблиці. Наведений нижче запит знаходить відомості про замовлення для клієнтів, які проживають у Сіетлі:
SELECT OrderNo, OrderDate, LastName, Address
FROM Deliveries
WHERE City = 'Seattle';
Що таке збережена процедура?
Збережена процедура визначає інструкції SQL, які можна виконувати за допомогою команди. Збережені процедури використовуються для інкапсуляції програмної логіки в базі даних для дій, необхідних програмам під час роботи з даними.
Ви можете визначити збережену процедуру з параметрами, щоб створити гнучке рішення для поширених дій, які, можливо, доведеться застосовувати до даних на основі певного ключа або критеріїв. Наприклад, можна визначити наведену нижче збережену процедуру, щоб змінити назву продукту на основі вказаного ідентифікатора продукту.
CREATE PROCEDURE RenameProduct
@ProductID INT,
@NewName VARCHAR(20)
AS
UPDATE Product
SET Name = @NewName
WHERE ID = @ProductID;
Якщо потрібно перейменувати продукт, ви можете виконати збережену процедуру, передавши ідентифікатор продукту та нове ім'я для призначення:
EXEC RenameProduct 201, 'Spanner';
Що таке індекс?
Індекс дає змогу шукати дані в таблиці. Подумайте про індекс над таблицею, як індекс на задній панелі книги. Індекс книги містить відсортований набір посилань зі сторінками, на яких відбувається кожне посилання. Якщо потрібно знайти посилання на елемент у книзі, перегляньте його в індексі. Номери сторінок в індексі можна використовувати, щоб переходити безпосередньо до потрібних сторінок книги. Без індексу, можливо, доведеться прочитати всю книгу, щоб знайти потрібні посилання.
Коли ви створюєте індекс у базі даних, ви вказуєте стовпець із таблиці, а індекс містить копію цих даних у відсортованій послідовності з вказівниками на відповідні рядки таблиці. Коли користувач запускає запит, який указує цей стовпець у реченні WHERE , система керування базою даних може використовувати цей індекс, щоб швидше отримувати дані, ніж якби йому доводилося перевіряти весь рядок таблиці за рядком.
Наприклад, щоб створити індекс у стовпці "Ім'я " таблиці "Продукт ", можна використати такий код:
CREATE INDEX idx_ProductName
ON Product(Name);
Індекс створює структуру на основі дерева, яку оптимізатор запитів системи бази даних може використовувати для швидкого пошуку рядків у таблиці "Продукт" на основі вказаного імені.
Для таблиці з кількома рядками використання індексу, можливо, не ефективніше, ніж просто читання всієї таблиці та пошук рядків, запитаних запитом (у такому випадку оптимізатор запитів ігноруватиме індекс). Однак, якщо таблиця містить багато рядків, індекси можуть значно підвищити продуктивність запитів.
У таблиці можна створити багато індексів. Отже, якщо ви також хочете знайти продукти на основі ціни, можливо, знадобиться створити інший індекс у стовпці Price (Ціна ) у таблиці "Продукт ". Проте індекси не безкоштовні. Індекс використовує простір для зберігання, і щоразу, коли ви вставляєте, оновлюєте або видаляєте дані в таблиці, індекси для цієї таблиці мають підтримуватися. Ця додаткова робота може сповільнити вставлення, оновлення та видалення операцій. Слід уразити баланс між індексами, які прискорюючи запити, і витратами на виконання інших операцій.