Python'da Bağlantılı Tablolar Zinciri
Şimdi kullanıcıların belirli şehirlerde yaşadığını ve bu şehirlerin farklı ülkelerde bulunduğunu varsayalım. Bu durumda depolamak için üç tabloya ihtiyacımız olacak: kullanıcılar şehirlerle, şehirler ise ülkelerle ilişkilendirilecektir. Bu durumda kullanıcıların ülkelerle olan bağlantısı için ayrıca bir alana ihtiyacımız olmayacak - çünkü kullanıcılar zaten şehirler ve ülkeler arasındaki bağlantı aracılığıyla ülkelerle ilişkili olacaklar.
Tablolarımıza bir göz atalım. Ülkeler tablosu:
| id | name |
|---|---|
| 1 | country1 |
| 2 | country2 |
Şehirler tablosu:
| id | name | country_id |
|---|---|---|
| 1 | city1 | 1 |
| 2 | city2 | 1 |
| 3 | city3 | 2 |
Kullanıcılar tablosu değişmeden kalacak:
| id | name | city_id |
|---|---|---|
| 1 | user1 | 1 |
| 2 | user2 | 1 |
| 3 | user3 | 2 |
| 4 | user4 | 1 |
| 5 | user5 | 3 |
| 6 | user6 | 2 |
Sorgular
Kullanıcıları şehirleri ve ülkeleriyle birlikte almak için iki birleştirme (join) yapmamız gerekecek: ilki şehirleri kullanıcılara bağlayacak, ikincisi ise ülkeleri şehirlere bağlayacak:
SELECT
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
Pratik Görevler
Ürünlerin belirli bir alt kategoriye, alt kategorilerin ise belirli bir kategoriye ait olduğunu varsayalım. Depolama yapısını açıklayın.
Ürünleri, alt kategorileri ve kategorileriyle birlikte getiren bir sorgu yazın.
Alt kategorileri, kategorileriyle birlikte getiren bir sorgu yazın.