АКЦИЯ: бесплатные месячные курсы по созданию сайтов
на выбор: верстка, JavaScript, PHP или фреймворки. Сегодня последний день для записи! Жми!
⊗pyPmDOLT 122 of 129 menu
Бесплатная Тренировка Верстки. Приглашаются желающие поверстать!

Связывание таблиц в базах данных в Python

Пусть у нас есть таблица с именами юзеров и городами, в которых они живут:

users
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, которая будет ссылаться на город юзера.

Итак, давайте сделаем две таблицы. Таблица с городами:

cities
id name
1 city1
2 city2
3 city3

Таблица с юзерами:

users
id name city_id
1 user1 1
2 user2 1
3 user3 2
4 user4 1
5 user5 3
6 user6 2

Практические задачи

Пусть вам нужно хранить товары (название, цена, количество) и категории этих товаров. Распишите структуру хранения.

Пусть вам нужно хранить реки и моря, в которые впадают эти реки. Распишите структуру хранения.

Пусть вам нужно хранить города и страны, в которых они находятся. Распишите структуру хранения.

enru