/* Aufgabe 1: * d) */ SELECT sub.* FROM stratman.hierarchy sub, (SELECT * FROM stratman.hierarchy WHERE pre=$x$) AS start WHERE sub.pre < start.pre AND start.pre <= (sub.pre + sub.size) ORDER BY pre DESC; /* * e) */ SELECT sub1.* FROM stratman.hierarchy sub1, (SELECT * FROM stratman.hierarchy WHERE pre=$x$) AS start1 WHERE sub1.pre > start1.pre AND sub1.pre <= (start1.pre + start1.size) INTERSECT SELECT sub2.* FROM stratman.hierarchy sub2, (SELECT * FROM stratman.hierarchy WHERE pre=$y$) AS start2 WHERE sub2.pre > start2.pre AND sub2.pre <= (start2.pre + start2.size); /* * f) */ SELECT sub1.* FROM stratman.hierarchy sub1, (SELECT * FROM stratman.hierarchy WHERE pre=$x$) AS start1 WHERE sub1.pre < start1.pre AND start1.pre <= (sub1.pre + sub1.size) INTERSECT SELECT sub2.* FROM stratman.hierarchy sub2, (SELECT * FROM stratman.hierarchy WHERE pre=$y$) AS start2 WHERE sub2.pre < start2.pre AND start2.pre <= (sub2.pre + sub2.size) ORDER BY pre DESC LIMIT 1; /* * g) */ SELECT sub.* FROM stratman.hierarchy as sub, (SELECT * FROM stratman.hierarchy WHERE pre=$x$) AS start WHERE sub.pre > start.pre AND sub.pre <= (start.pre+start.size); /* * h) */ SELECT level, count(*) AS count_nodes FROM stratman.hierarchy GROUP BY level ORDER BY level; /* * i) */ SELECT sub.* FROM hierarchy AS sub WHERE sub.size = 0 AND sub.level < (SELECT MAX(sub2.level) FROM hierarchy AS sub2); /* * j) */ /* * k) */ SELECT sub.size+1 AS size FROM stratman.hierarchy sub WHERE sub.pre = 1; /* * l) */ Ja es gibt Probeleme, denn wenn man eine Node irgendwo in der Mitte einfuegt (INSERTION), dann aendert sich die size des subtrees. Es muss also die size aller parent Nodes geupdatet werden. Ausserdem aendert sich das pre aller nachfolgenden Nodes in der preorder Folge. Fuer DELETE gilt dasselbe, jedoch koennte man sagen das man einfach die preorder Folge beibehaelt, denn das aendert nichts. Jedoch muss auch die size der parent Nodes geupdatet werden. UPDATE sollte nur auf Name zugelassen werden, ausser es kommt von einer INSERTION oder DELETE Anweisung, denn durch pre, level und size ist die Struktur des Baumes vorgegeben. /* * m) */ Operation auf der Baumstruktur werden nur durch aufwendige Joins moeglich, da ja jedes Level der Baumstruktur in einer neuen Tabelle gespeichert werden. /* Aufgabe 2: * a) */ GRANT SELECT ON stratman.hierarchy TO haveman; /* * b) */ GRANT INSERT, UPDATE ON stratman.hierarchy TO haveman; /* * c) */ GRANT CREATE ON SCHEMA stratman TO haveman; /* * d) Noch nicht korrekt! */ ALTER TABLE stratman.hierarchy OWNER TO haveman; /* * e) */ ALTER TABLE stratman.hierarchy OWNER TO stratman; REVOKE ALL ON stratman.hierarchy FROM haveman; REVOKE CREATE ON SCHEMA stratman FROM haveman; /* * f) Noch nicht korrekt! */ GRANT SELECT ON "address_view" TO PUBLIC WITH GRANT OPTION; /* * g) Noch nicht korrekt! */ REVOKE GRANT OPTION ON "address_view" FROM PUBLIC CASCADE; /* * h) */ GRANT USAGE ON SCHEMA stratman TO haveman; /* * i) NOCH nicht korrekt! */ REVOKE SELECT ON "address_view" FROM PUBLIC; /* * j) */ /* * k) Nicht korrekt! */ REVOKE INSERT, UPDATE, DELETE ON SCHEMA stratman.genres FROM stratman; /* * l) */ GRANT SELECT ON "address_view" TO GROUP infosys;