Marrëdhëniet e të Dhënave të Afërta në Python
Le të supozojmë se kemi përballë detyrën e ruajtjes së baballarëve dhe djemve. Le të supozojmë se çdo baballar mund të ketë vetëm një djalë, dhe djali nga ana e tij gjithashtu mund të ketë një djalë.
Duhet të gjejmë se si do t'i ruajmë
të dhënat. Ideja e parë që mund t'ju vijë
në mendje është të bëhen dy tabela: parents
për baballarët dhe sons për djemtë. Pastaj
t'i lidhim këto tabela me ndonjë fushë:
son_id ose parent_id.
Megjithatë, kjo nuk është një ide shumë e mirë - në fund të fundit e njëjti person mund të jetë njëkohësisht si baballar ashtu edhe djalë - dhe do të duhej ta ruajmë atë në të dyja tabelat, dhe kjo është e papërshtatshme, merr më shumë hapësirë dhe lehtësisht çon në gabime.
Një variant më i mirë është të lidhim tabelën
vete me vetveten: le të krijojmë një tabelë users,
në të do të ruajmë të gjithë përdoruesit dhe secilit
t'i bëjmë një fushë son_id, në të cilën do të
ruhet id i djalit nga e njëjta tabelë:
| id | name | son_id |
|---|---|---|
| 1 | user1 | 2 |
| 2 | user2 | 3 |
| 3 | user3 | null |
Kërkesat
Tani le të shkruajmë një kërkesë që do të marrë përdoruesin së bashku me djalën e tij.
Për fillim, le të marrim vetëm përdoruesit:
SELECT
*
FROM
users
Tani le t'i bashkojmë (join) përdoruesve djemtë e tyre. Ne do ta bashkojmë tabelën vetë me vetveten, prandaj duhet të kryejmë riemërtimin e saj:
LEFT JOIN users as sons
Tani mund të specifikojmë lidhjen e tabelës bazë dhe asaj të riemërtuar:
LEFT JOIN users as sons ON sons.id=users.son_id
Tani le të specifikojmë fushat:
SELECT
users.name as user_name, sons.name as son_name
Le të mbledhim gjithçka së bashku dhe do të marrim kërkesën në vijim:
SELECT
users.name as user_name, sons.name as son_name
FROM
users
LEFT JOIN users as sons ON sons.id=users.son_id
Detyra praktike
Le të supozojmë se kemi kategori. Çdo kategori mund t'i përkasë një kategorie prindërore, e cila nga ana e saj mund t'i përkasë kategorisë së saj prindërore dhe kështu me radhë. Përshkruani strukturën e ruajtjes.
Shkruani një kërkesë që do të marrë kategorinë së bashku me kategorinë e saj prindërore.
Shkruani një kërkesë që do të marrë kategorinë së bashku me prindin e saj dhe prindin e parë (gjyshin).
Shkruani një kërkesë që do të marrë kategorinë së bashku me prindin e saj, prindin e parë (gjyshin) dhe prindin e parë të parë (stërgjyshin).