Recursive? ΚΑΚΟ-ΚΑΚΟ-ΚΑΚΟ-ΚΑΚΟ-ΚΑΚΟ-ΚΑΚΟ-ΚΑΚΟ-ΚΑΚΟ-ΚΑΚΟ-ΚΑΚΟ-ΚΑΚΟ
Και αυτά που υπάρχουν στην Oracle είναι ψιλοχακιά. Από πίσω η Oracle δημιουργεί ένα Temporary View το οποίο υλοποιεί την ιεραρχία σαν self-join. Νομίζω χρησιμοποιεί και cursor (φτού κ**ά!). Συντακτικά μπορεί να βολεύει αλλά από πλευράς απόδοσης έχει το ίδιο πρόβλημα με το να έγραφες το SQL με το χέρι.
Το κόλπο για να φτιάξεις ιεραρχίες, και μάλιστα με ΑΠΛΗ SQL είναι να καταλάβεις ότι και η ιεραρχία είναι σχέση συνόλων. O Joe Celko στο βιβλίο του SQL for Smarties περιγράφει ένα τρόπο να φτιάξεις ιεραρχίες με τη χρήση ενός βοηθητικού πίνακα πετυχαίνοντας άριστη απόδοση. Τη λύση αυτή την περιγράφει και σε ένα παλιό άρθρο του Intelligent Enterprise Magazine,
http://www.intelligententerprise.com/001020/celko.shtml, πολύ καλύτερα από ότι θα μπορούσα εδώ. Φέτος μάλιστα έβγαλε και ένα βιβλίο ειδικά για ιεραρχίες, το Trees and Hierarchies in SQL for Smarties.
Τώρα, τα recursive queries ίσως να κάνουν την ιστορία πιό εύκολη. Θέλει μελέτη το ζήτημα, αλλά η δουλειά μπορεί να γίνει και τώρα χωρίς να καταφύγει κανείς σε αυτά.
Τη λύση του Celko τη χρησιμοποίησα παλιότερα για να κάνω joins κάποιο πίνακα με ιεραρχικό πίνακα permissions που περιείχε ... εκατομμύρια εγγραφές! Σε καμμία περίπτωση δεν θα πετύχαινα αυτή την ταχύτητα με Oracle ή recursive queries.
Παναγιώτης Καναβός, Freelancer
Twitter: http://www.twitter.com/pkanavos