Останнім часом я багато чув, що SQL - жахлива мова, і, схоже, кожен фреймворк під сонцем є попередньо упакованим шаром абстракції бази даних.
Зауважте, що ці шари просто перетворюють власні речі в SQL
. Для більшості виробників баз даних SQL
це єдиний спосіб спілкування з двигуном.
На моєму досвіді, SQL часто є набагато простішим, універсальнішим та зручнішим для програмування способом управління введенням та виведенням даних. Кожен шар абстрагування, який я використовував, здається, є досить обмеженим підходом і не має реальної користі.
... причина, з якої я щойно описаний вище.
Шари бази даних нічого не додають , вони просто обмежують вас. Вони роблять запити суперечливо простішими, але ніколи не більш ефективними.
За визначенням, у шарах бази даних нічого не є SQL
.
Що робить SQL
так жахливим і чому цінні шари абстракції баз даних?
SQL
це приємна мова, однак для роботи з цим потрібен певний поворот мозку.
Теоретично, SQL
це декларативно, тобто ви заявляєте, що хочете отримати, і двигун забезпечує це найшвидшим способом.
На практиці існує багато способів сформулювати правильний запит (тобто запит, який повертає правильні результати).
Оптимізатори здатні створити замок Лего з деяких заздалегідь заданих алгоритмів (так, їх багато), але вони просто не можуть створити нові алгоритми. Все ще потрібно SQL
розробнику, щоб допомогти їм.
Однак деякі очікують, що оптимізатор створить "найкращий можливий план", а не "найкращий план, доступний для цього запиту із заданою реалізацією SQL
двигуна".
І як ми всі знаємо, коли комп’ютерна програма не відповідає очікуванням людей, це стає виною саме програма, а не очікування.
Однак у більшості випадків переформулювання запиту може створити найкращий можливий план. Існують завдання, коли це неможливо, однак, з новими і зростаючими вдосконаленнями SQL
цих випадків стає все менше і менше.
Хоча було б добре, якби постачальники надавали доступ низького рівня до функцій на кшталт "отримати діапазон індексу", "отримати рядок rowid
" тощо, як C
компілятори дозволяють вбудовувати збірку прямо на мову.
Я нещодавно написав статтю про це у своєму блозі: