Python'da Verilerin Aile İlişkileri
Diyelim ki babaları ve oğulları saklama göreviyle karşı karşıyayız. Her babanın sadece bir oğlu olabilsin ve oğul da sırayla bir oğula sahip olabilsin.
Verileri nasıl saklayacağımızı düşünmemiz
gerekiyor. Akla gelebilecek ilk fikir - iki
tablo yapmak: babalar için parents
ve oğullar için sons. Sonra
bu tabloları bir alanla ilişkilendirmek:
son_id veya parent_id.
Ancak, bu çok iyi bir fikir değil - çünkü aynı kişi aynı zamanda hem baba hem de oğul olabilir - ve onu her iki tabloda da saklamak zorunda kalırız, bu da kullanışsızdır, daha fazla yer kaplar ve kolayca hatalara yol açar.
Daha iyi bir seçenek - tabloyu kendisiyle
ilişkilendirmektir: bir users tablosu yapalım,
içinde tüm kullanıcıları saklayalım ve her birine
son_id alanı verelim, bu alanda aynı tablodan
oğlunun id'si saklansın:
| id | name | son_id |
|---|---|---|
| 1 | user1 | 2 |
| 2 | user2 | 3 |
| 3 | user3 | null |
Sorgular
Şimdi bir kullanıcıyı onun oğluyla birlikte getiren bir sorgu yazalım.
Öncelikle sadece kullanıcıları getirelim:
SELECT
*
FROM
users
Şimdi kullanıcılara onların oğullarını join edelim. Tabloyu kendisine join edeceğiz, bu nedenle onu yeniden adlandırmamız gerekiyor:
LEFT JOIN users as sons
Şimdi ana tablo ile yeniden adlandırılmış tablo arasındaki ilişkiyi belirtebiliriz:
LEFT JOIN users as sons ON sons.id=users.son_id
Şimdi alanları belirtelim:
SELECT
users.name as user_name, sons.name as son_name
Hepsini bir araya getirelim ve aşağıdaki sorguyu elde edelim:
SELECT
users.name as user_name, sons.name as son_name
FROM
users
LEFT JOIN users as sons ON sons.id=users.son_id
Pratik Görevler
Diyelim ki kategorilerimiz var. Her kategori bir üst kategorisine ait olabilir, o da sırayla kendi üst kategorisine ait olabilir ve bu böyle devam eder. Saklama yapısını açıklayın.
Bir kategoriyi onun üst kategorisiyle birlikte getiren bir sorgu yazın.
Bir kategoriyi onun üst kategorisi ve üstünün üst kategorisiyle birlikte getiren bir sorgu yazın.
Bir kategoriyi onun üst kategorisi, üstünün üst kategorisi ve üstünün üstünün üst kategorisiyle birlikte getiren bir sorgu yazın.