PHP klase / Nested Set Db Table
Većina web developer-a se bar jednom susretala sa potrebom da podatke u SQL bazi organizuje hijerarhijski. Ali problem je što tabele u relacionim bazama podataka nisu hijerarhijske, već obične liste. Imajući to u vidu, na programeru je da taj problem prevaziđe.
Postoji nekoliko rešenja za realizaciju ovakvog zahteva, od kojih se dva izdvajaju kao najbolja i najkorišćenija: Adjacency List model i Nested Set model. I jedan i drugi pristup imaju svojih prednosti i mana, a stvari otprilike stoje ovako… Kod Adjacency List modela, ažuriranje i unos nove stavke u hijerarhiju je kranje jednostavna, dok je dohvatanje podataka zakomplikovano i loše što se performansi tiče, uglavnom zbog činjenice da podaci moraju da se izvlače rekurzivno. Kod Nested Set modela stvar je suprotna, kod promena u hijerarhiji mora da se vodi računa o više stvari, a dohvatanje celog "drveta" je jako efikasno i može da se reši samo jednim upitom. Više o svemu ovome može pročitati na ovoj stranici, na kojoj je uporedni test ova dva modela. Iz naslova ove teksta vam je jasno koji model je moj izbor. 
Nested Set Db Table omogućava rad sa podacima u bazi, organizovanim po Nested set modelu. Ova klasa je apstrakna i njen API nudi metode koje olakšavaju rad sa tabelom koja ima hijerarhijski organizovane podatke, a to su:
- getTree() - omogućava dohvatanje celog "stabla", uključujući i informaciju o dubini svakog unosa u tabeli,
- insert() - metod za unos novog reda u tabelu, pri čemu je moguće definisati na kojoj poziciji u hijerarhiji će se nalaziti taj red,
- updateNode() - metod za ažuriranje informacija koje se tiču pozicije u hijerarhiji nekog unosa,
- deleteNode() - metod za brisanje unosa, koji omogućava brisanje samo jednog reda ili i svih onih kojima je red koji se briše nadređen u hijerarhiji (rekurzivno brisanje)
Klasa NestedSetDbTable_Abstract bi trebala da se koristi na način da se iz nje izvede neka druga klasa, pri čemu bi se redefinisanjem postavili određeni parametri tabele u bazi sa kojom namerava da se radi (njeno ime, primarni ključ, imena "left" i "right" kolona), nakon čega bi instanca tako izvedene klase predstavljala kompletan interfejs za rad sa tom tabelom. Za rad ove klase potrebno je podesiti i PDO adapter koji će se koristiti za komunikaciju sa bazom.

