Защо база данни
Проблем
Таблицата, която всички пипат
Малък онлайн магазин води поръчките си в една голяма таблица в Excel. На всеки ред са датата, името на клиента, имейлът му, градът, продуктът, количеството и цената. След година редовете са 3 000 и започват неприятностите:
- Мария сменя имейла си. Той е на 40 реда. Поправяш 38.
- Колегата пише „Софя“, ти пишеш „София“, и отчетът по градове вече лъже.
- Двама отварят файла по едно и също време. Промените на единия изчезват.
- „Колко е похарчил всеки клиент от Пловдив през март?“ отнема половин час филтри.
Excel е хубав инструмент, но не е направен да пази данните на работещ бизнес.
Идеята
База данни
Базата данни е подредено място за данни. Програмата, която я пази, се казва система за управление на бази данни (СУБД, на английски DBMS). Тя прави четири неща, които файлът не прави:
- Пази правила. Имейлът е уникален, цената не е отрицателна, всяка поръчка е на съществуващ клиент. Ред, който нарушава правило, просто не влиза.
- Пази всеки факт веднъж. Имейлът на Мария е на едно място. Поръчките ѝ само сочат към нея.
- Пуска много хора едновременно, без някой да загуби промените си.
- Отговаря на въпроси, и при милиони редове, обикновено за милисекунди.
Ще срещнеш имената PostgreSQL, MySQL, SQL Server, Oracle и SQLite. SQLite е в телефона ти, в браузъра ти и в много приложения, а в този курс работи направо в страницата.
По-точно, за любопитните
PostgreSQL, MySQL и SQL Server са сървъри: отделна програма, към която приложенията се свързват по мрежата, често от много компютри едновременно. SQLite е библиотека: базата е един файл, а програмата го отваря сама. Езикът, на който им задаваш въпроси, е почти един и същ. Разликите ще срещаш по пътя.
Идеята
Таблици, редове, колони
В най-разпространения вид бази, релационните, данните са в таблици. Една таблица е за един вид неща: клиенти, продукти, поръчки.
- Всеки ред е едно нещо: един клиент.
- Всяка колона е едно свойство: име, имейл, град. Всички стойности в колоната са от един вид.
Това са клиентите на магазина, с който ще работиш през целия курс. Натисни „Изпълни“:
Написаното е заявка на езика SQL. SELECT * значи „всички колони“, FROM customers значи „от таблицата customers“. Точката и запетаята завършва заявката.
Полето е истинска база. Промени заявката, пусни я пак, сбъркай нарочно: нищо не може да се развали, а „Нова база“ я връща в началото.
По-точно, за любопитните
Виж клиент 12, Борис. Вместо град има NULL: „няма стойност“. Не е празен текст и не е нула. Ще му посветим цял урок, защото NULL е причина за много грешни отчети.
Пробвай
Продуктите
Покажи всички продукти на магазина. Таблицата им се казва products.
Решение
SELECT * FROM products;25 продукта. Виж колоната category_id: там не пише „Млечни“, а число. То сочи към ред в таблицата с категориите. Така името на всяка категория е записано веднъж.
Пробвай
Ред или колона?
Упражнение
Разходка из магазина
Освен клиентите и продуктите базата има още четири таблици. Разгледай две от тях.
1. Покажи всички поръчки (orders). Колко са? Виж колоната customer_id: тя казва чия е поръчката, със същото число, което клиентът има в customers.
Всички поръчки:
Решение
SELECT * FROM orders;60 поръчки. Поръчка 60 е на клиент 1. Отвори клиентите горе и виж кой е: Мария.
2. Покажи категориите (categories). Някои имат parent_id, а две нямат. Какво мислиш, че значи това?
Всички категории:
Решение
SELECT * FROM categories;„Храни“ и „Дом“ са главните категории (без родител). „Хляб и тестени“ има parent_id 1, значи е под „Храни“. Така в таблица се пази дърво.
Тест