Pythonda Melumatlarin Qohumluq Elaqeleri
Tesewwur edek ki, qarsimizda atalar ve ogullar saxlanmasi meselesi durur. Her atanin yalniz bir oglu ola biler, ogul ise oz novbesinde bir oglu ola biler.
Melumatlari necə saxlayacagimizi dusunmeliyik.
Ağila gelen ilk fikir - iki cedvel yaratmaqdir: parents
atalar ucun ve sons ogullar ucun. Sonra
bu cedvelleri bir xanasla elaqelendirmek:
son_id ya da parent_id.
Lakin, bu fikir cox yaxşı deyil - axı eyni insan hem ata, hem de oglu ola biler - ve onu her iki cedvelde saxlamaq mecburiyyetinde qalariq, bu ise narahatedici, daha cox yer tutur ve asanlıqla sehvlere sebeb olur.
Daha yaxşı variant - cedveli ozu ile
elaqelendirmekdir: users cedveli yaradaq,
ora butun istifadeçileri yerləşdirek ve her birine
son_id xanası teyin edek, hansinda ki,
hemin cedveldeki oglun id saxlanilacaq:
| id | name | son_id |
|---|---|---|
| 1 | user1 | 2 |
| 2 | user2 | 3 |
| 3 | user3 | null |
Sorğular
Indi gelin istifadeçini onun oglu ile birlikde çıxaran bir sorğu yazaq.
Evvelce gelin sadəcə istifadeçileri çıxaraq:
SELECT
*
FROM
users
Indi istifadeçilere onlarin ogullarini birleşdirek. Biz cedveli ozu ile birleşdireceyik, ona göre onu yeniden adlandirmaq lazımdır:
LEFT JOIN users as sons
Indi biz esas cedvelle yeniden adlandırılmış cedvel arasında elaqeni göstere bilerik:
LEFT JOIN users as sons ON sons.id=users.son_id
Indi xanalari gosterək:
SELECT
users.name as user_name, sons.name as son_name
Hamısını birlikde toplayaq ve aşağıdakı sorğunu elde edek:
SELECT
users.name as user_name, sons.name as son_name
FROM
users
LEFT JOIN users as sons ON sons.id=users.son_id
Praktiki Tapşırıqlar
Tesewwur edek ki, kateqoriyalarımız var. Her kateqoriya ana kateqoriyaya aid ola biler, o da oz novbesinde oz ana kateqoriyasina ve s. Saxlama quruluşunu izah edin.
Kateqoriyani onun ana kateqoriyası ile birlikde çıxaran bir sorğu yazın.
Kateqoriyani onun ana kateqoriyası ve baba kateqoriyası ile birlikde çıxaran bir sorğu yazın.
Kateqoriyani onun ana kateqoriyası, baba kateqoriyası ve ata baba kateqoriyası ile birlikde çıxaran bir sorğu yazın.