Верига от свързани таблици в Python

Нека сега потребителите живеят в определени градове, а тези градове се намират в различни държави. В този случай за съхранението ще ни трябват вече три таблици: потребителите ще бъдат свързани с градове, а градовете - с държави. При това няма да ни трябва поле за връзка на потребителите с държавите - защото потребителите така или иначе ще бъдат свързани с държавите чрез връзката на градовете и държавите.

Нека погледнем нашите таблици. Таблицата с държави:

countries
id name
1 country1
2 country2

Таблицата с градове:

cities
id name country_id
1 city1 1
2 city2 1
3 city3 2

Таблицата с потребители ще остане непроменена:

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

Заявки

За да извлечем потребителите заедно с техните градове и държави, ще трябва да направим две съединения (join): първото ще присъедини градовете към потребителите, а второто - държавите към градовете:

sqlSELECT
  users.name,
  cities.name as city_name,
  countries.name as country_name
FROM
  users
LEFT JOIN cities ON cities.id=users.city_id
LEFT JOIN countries ON countries.id=cities.country_id

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

Задание 1

Нека продуктите принадлежат на определена подкатегория, а подкатегориите принадлежат на определена категория. Описайте структурата на съхранение.

Задание 2

Напишете заявка, която извлича продуктите, заедно с техните подкатегории и категории.

Задание 3

Напишете заявка, която извлича подкатегориите заедно с техните категории.