Связывание таблиц в базах данных в Python
Пусть у нас есть таблица с именами юзеров и городами, в которых они живут:
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 |
Практические задачи
Пусть вам нужно хранить товары (название, цена, количество) и категории этих товаров. Распишите структуру хранения.
Пусть вам нужно хранить реки и моря, в которые впадают эти реки. Распишите структуру хранения.
Пусть вам нужно хранить города и страны, в которых они находятся. Распишите структуру хранения.