1. Змінюємо назви колонок
Також нам потрібно розібратися із назвами колонок. Зараз у нас повторюються назви name та id, адже вони містять різні дані. З іншого боку, є перша колонка id і колонка employee_id, які містять ті самі дані.
Давай напишемо запит, де будуть лише потрібні колонки, а також перейменуємо колонки з однаковими іменами:
SELECT
task.id AS task_id,
task.name AS task_desc,
task.deadline AS deadline,
emploee.id AS emploee_id,
emploee.name AS emp_name,
emploee.occupation AS
emp_occupation
FROM employee, task
WHERE emploee.id = task.< span class="text-green">emploee_id
І результат такого запиту:
task_id | task_desc | deadline | emploee_id | emp_name | emp_occupation |
---|---|---|---|---|---|
1 | Виправити багу на фронтенді | 2022-06-01 | 1 | Шевченко Ігор | Програміст |
2 | Виправити багу на бекенді | 2022-06-15 | 2 | Коваленко Максим | Програміст |
7 | Насолоджуватися життям | (NULL) | 4 | Мельник Степан | Директор |
3 | Купити каву | 2022-07-01 | 5 | Кірієнко Анастасія | Офіс-менеджер |
4 | Купити каву | 2022-08-01 | 5 | Кірієнко Анастасія | Офіс-менеджер |
5 | Купити каву | 2022-09-01 | 5 | Кірієнко Анастасія | Офіс-менеджер |
8 | Насолоджуватися життям | (NULL) | 6 | Пончик | кіт |
Чудово, проблему з незрозумілими назвами колонок успішно вирішено. Запит став трохи довгим, зате в результуючій таблиці все зрозуміло. І жодних зайвих стовпчиків.
2. Аліаси таблиць
Іноді назви таблиць бувають надто довгими і займають багато місця у запиті. Тому творці SQL для підвищення читабельності, як і у випадку з колонками, запропонували можливість вказувати аліаси таблиць.
Загальний вид аліасів (псевдонімів таблиць) такий:
FROM таблиця1 псевдонім1, таблиця2 псевдонім2
Давай перепишемо наш попередній запит із використанням коротких псевдонімів:
SELECT
t.id AS task_id,
t.name AS task_desc,
t.deadline AS deadline,
e.id AS emploee_id,
e.name AS emp_name,
e.occupation AS emp_occupation
FROM employee e, task t
WHERE e.id = t.emploee_id
Читабельність трохи знизилася, але це тому, що назви таблиць спочатку були простими і зрозумілими. Може бути і так:
SELECT
task.id AS task_id,
task.name AS task_desc,
task.deadline AS deadline,
emploee.id AS emploee_id,
emploee.name AS emp_name,
emploee.occupation AS
emp_occupation
FROM
Microsoft_it_department_employee employee,
Year2022_priority_task task
WHERE emploee.id = task.emploee_id
А в цьому випадку аліаси вже корисні, так? ;)
3. Первинний ключ
І ще одна важлива інформація про таблиці. Пам'ятаєш, що в нас у таблиці task була колонка employee_id? За допомогою неї ми посилалися на ID співробітника з таблиці employee.
Якщо ми хочемо посилатися з однієї таблиці на рядки іншої таблиці, то таблиця, на яку посилаються, повинна мати колонку з ID, яку ще називають первинним ключем — PRIMARY KEY.
Найчастіше це спеціально додана колонка, тип значень якої — int. При додаванні записів до таблиці SQL автоматично встановлює значення цієї колонки.
На ці ключі потім багато чого зав'язується:
- зв'язування різних таблиць одна з одною;
- швидкий пошук та фільтрація за id;
- цілісність даних у базі даних (немає посилань на неіснуючі id);
- видалення даних, на які ніхто не посилається;
- і багато іншого.
До речі, бувають ситуації, коли таблиця має так званий натуральний ключ. Це коли є колонка, вміст якої є унікальним. Наприклад, ми вирішили до таблиці співробітників додати:
- Порядок їхнього приходу в компанію;
- Податковий номер;
- Номер та серію паспорта.
Іноді проєктувальники баз даних використовують натуральний ключ як первинний, але найчастіше їх використовують окремо. Адже записи можна видаляти, змінювати тощо.
Читали, мабуть, історії в інтернеті, коли на людину пристави вішають борги її повного тезки? Це пов'язано з поняттям унікального ключа. Банкам і приставам дуже зручно шукати людину за ПІБ та роком народження. І у 99% випадків цього достатньо для того, щоб ідентифікувати людину.
Але залишився <1% — це повні тезки, з однаковим роком народження. У житті кожного з нас таких, швидше за все, немає, а от у масштабах країни — є. Загалом, якщо ти пишеш софт або проєктуєш БД, корисно знати, що і так теж може бути.