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:

users
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:

sqlSELECT
  *
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:

sqlLEFT JOIN users as sons

Şimdi ana tablo ile yeniden adlandırılmış tablo arasındaki ilişkiyi belirtebiliriz:

sqlLEFT JOIN users as sons ON sons.id=users.son_id

Şimdi alanları belirtelim:

sqlSELECT
  users.name as user_name, sons.name as son_name

Hepsini bir araya getirelim ve aşağıdaki sorguyu elde edelim:

sqlSELECT
  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

Задание 1

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.

Задание 2

Bir kategoriyi onun üst kategorisiyle birlikte getiren bir sorgu yazın.

Задание 3

Bir kategoriyi onun üst kategorisi ve üstünün üst kategorisiyle birlikte getiren bir sorgu yazın.

Задание 4

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.