⊗pyPmDOFR 126 of 129 menu

Радаводныя сувязі даных у Python

Няхай перад намі стаіць задача захоўваць бацькоў і сыноў. Няхай кожны бацька можа мець толькі аднаго сына, а сын у сваю чаргу таксама можа мець аднаго сына.

Трэба прыдумаць, як мы будзем захоўваць даныя. Першая ідэя, якая можа прыйсці у галаву - зрабіць дзве табліцы: parents для бацькоў і sons для сыноў. Затым звязаць гэтыя табліцы якім-небудзь полем: son_id або parent_id.

Аднак, гэтая ідэя не вельмі добрая - бо адзін і той жа чалавек можа быць адначасова і бацькам і сынам - і прыйдзецца захоўваць яго ў абодвух табліцах, а гэта нязручна, займае больш месца і лёгка прыводзіць да памылак.

Больш добры варыянт - звязаць табліцу саму з сабой: зробім табліцу users, у ёй будзем захоўваць усіх карыстальнікаў і кожнаму зробім поле son_id, у якім будзе захоўвацца id сына з гэтай жа табліцы:

users
id name son_id
1 user1 2
2 user2 3
3 user3 null

Запыты

Давайце цяпер напішам запыт, які дастане карыстальніка разам з яго сынам.

Для пачатку давайце проста дастанем карыстальнікаў:

SELECT * FROM users

Цяпер зджойнім да карыстальнікаў іх сыноў. Джойніць мы будзем табліцу саму да сябе, таму нам трэба выканаць яе перайменаванне:

LEFT JOIN users as sons

Цяпер мы можам паказаць сувязь асноўнай табліцы і перайменаванай:

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

Пакажам цяпер палі:

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

Сабяром усё разам і атрымаем наступны запыт:

SELECT users.name as user_name, sons.name as son_name FROM users LEFT JOIN users as sons ON sons.id=users.son_id

Практычныя задачы

Няхай у нас ёсць катэгорыі. Кожная катэгорыя можа належаць бацькоўскай катэгорыі, тая ў сваю чаргу сваёй бацькоўскай і так далей. Распішыце структуру захоўвання.

Напішыце запыт, які дастане катэгорыю разам з яе бацькоўскай катэгорыяй.

Напішыце запыт, які дастане катэгорыю разам з яе бацькам і дзедам.

Напішыце запыт, які дастане катэгорыю разам з яе бацькам, дзедам і прадзедам.

Беларуская
AfrikaansAzərbaycanБългарскиবাংলাČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Мы выкарыстоўваем cookie для працы сайта, аналітыкі і персаналізацыі. Апрацоўка дадзеных адбываецца згодна Палітыкай канфідэнцыяльнасці.
прыняць усе наладзіць адхіліць