Bağlantılı Tablolar Zinciri
Şimdi kullanıcıların belirli şehirlerde yaşadığını, bu şehirlerin de farklı ülkelerde bulunduğunu varsayalım. Bu durumda depolama için üç tabloya ihtiyacımız olacak: kullanıcılar şehirlerle, şehirler de ülkelerle bağlantılı olacak. Bu durumda kullanıcıların ülkelerle bağlantısı için bir alana ihtiyacımız olmayacak - çünkü kullanıcılar zaten şehirler ve ülkeler arasındaki bağlantı aracılığıyla ülkelerle bağlantılı olacak.
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 join yapmamız gerekecek: birincisi ş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 de belirli bir kategoriye ait olduğunu varsayalım. Depolama yapısını açıklayın.
Ürünleri, alt kategorileri ve kategorileriyle birlikte alacak bir sorgu yazın.
Alt kategorileri kategorileriyle birlikte alacak bir sorgu yazın.