Свързване на таблици в бази данни
Да предположим, че имаме таблица с имена на потребители и градове, в които те живеят:
| id | name | city |
|---|---|---|
| 1 | user1 | city1 |
| 2 | user2 | city1 |
| 3 | user3 | city2 |
| 4 | user4 | city1 |
| 5 | user5 | city3 |
| 6 | user6 | city2 |
Недостатък на тази таблица е, че един и същ град се повтаря няколко пъти за различни потребители. Това води до някои проблеми.
Първо, постоянното повторение води до това, че базата данни започва да заема много повече място.
Второ, е доста неудобно да се извършват операции с градове. Например, искаме да изведем на екрана списък от всички градове. Това не може да стане лесно. Ще трябва да получим всички потребители заедно с техните градове, след това да премахнем дубликати от получените градове и едва тогава ще получим този списък.
А сега си представете, че в базата има 10000
потребители от 10 града - заради тези 10
града ще трябва да извлечем цялата таблица
от огромен брой редове - ще се получи
много бавна операция с безсмислена
загуба на ресурси.
Решаване на проблема
Трябва да разделим нашата таблица на две: в едната
ще се съхраняват градове, а във втората - потребители.
При това в таблицата с потребители ще има колона
city_id, която ще сочи
към града на потребителя.
И така, нека направим две таблици. Таблица с градове:
| id | name |
|---|---|
| 1 | city1 |
| 2 | city2 |
| 3 | city3 |
Таблица с потребители:
| id | name | city_id |
|---|---|---|
| 1 | user1 | 1 |
| 2 | user2 | 1 |
| 3 | user3 | 2 |
| 4 | user4 | 1 |
| 5 | user5 | 3 |
| 6 | user6 | 2 |
Да предположим, че трябва да съхранявате продукти (име, цена, количество) и категории на тези продукти. Опишете структурата за съхранение.
Да предположим, че трябва да съхранявате реки и морета, в които тези реки се вливат. Опишете структурата за съхранение.
Да предположим, че трябва да съхранявате градове и държави, в които се намират. Опишете структурата за съхранение.