Σχεδιασμός Πληροφοριακών Συστημάτων Σημειώσεις Συμπλήρωμα για τις Εκδόσεις 4 (4.1) και 4.2 των Σημειώσεων Έκδοση 19/2/2011 Μάριος Μάντακας mmantak@gmail.com Διαφορά από την προηγούμενη Έκδοση: Προσθήκη 1 Προσθήκη 5 Σφάλμα 1 Σελ.83, 85, 86, 87 Εσφαλμένο: Τριαδική Αναδρομική Σχέση, Τριαδικές Αναδρομικές Σχέσεις Ορθό: Τριαδική Σχέση, Τριαδικές Σχέσεις Σφάλμα 2 Σελ.160 Εσφαλμένο: Ορθό: Template for username field: Email Label for username field: Email Σφάλμα 3 Σελ.167 Ορθό: Η εφαρμογή μου έχει αριθμό 122... Μ.Μάντακας Σχεδιασμός Πληροφοριακών Συστημάτων - Συμπλήρωμα, Έκδοση 19/2/2011 1/7
Σφάλμα 4 Σελ.174 και 176 Εσφαλμένο: from product p, category c, image i, Ορθό: from product p, category c Σφάλμα 5 Σελ.175 Ορθό: Η Σελίδα 1 έχει προς το παρόν την παρακάτω μορφή (χωρίς την πρώτη στήλη): Σφάλμα 6 Σελ. 194 Η σελίδα υπάρχει 2 φορές Σφάλμα 7 Σελ. 194, 197, 202, 204 Ορθό: Πρέπει να προστεθεί entity object products (πίνακας προϊόντων). Το control object display_page_5_sc κάνει προσπέλαση και στο entity object products. Σφάλμα 8 Σελ. 204 Ορθό: Λείπουν 2 γραμμές στο σχήμα: Το control object display_page_5_sc κάνει προσπέλαση στα entity objects SC_temp (μη αυθεντικοποιημένος πελάτης) ή SC_pers (αυθεντικοποιημένος πελάτης). Σφάλμα 9 Σελ. 227 Εσφαλμένα: Ορθά: delete_quantities_sc delete_quantities_sc_temp delete_quantities_sc_pers update_quantities_sc update_quantities_sc_temp update_quantities_sc_pers Σφάλμα 10 Σελ. 228 Ο κώδικας του πλαισίου δεν χρειάζεται (βλ. και παρακάτω Προσθήκη 3) Μ.Μάντακας Σχεδιασμός Πληροφοριακών Συστημάτων - Συμπλήρωμα, Έκδοση 19/2/2011 2/7
Παρατήρηση 1 Σελ.214 procedure insert_product_to_sc_pers Ο κώδικας είναι σωστός, αλλά η αύξηση της ποσότητας κατά 1 θα μπορούσε να προγραμματιστεί πιο απλά, ως εξής: If l_prod_count > 0 then update SC_pers set quantity = quantity + 1 where product_id = product_to_insert_id and customer_id = authenticated_customer_id ; Προσθήκη 1 - Άσκηση Λίστα Επιλογής: Στατική και Δυναμική λίστα τιμών Στην Επισκόπηση και Αναζήτηση Προϊόντων, και συγκεκριμένα στην αναζήτηση προϊόντων, υπάρχει ήδη μια λίστα επιλογής με στατική λίστα τιμών. Επιτρέπει την επιλογή του πλήθους προϊόντων ανά σελίδα. 1) Αλλάξτε την στατική λίστα τιμών, προσθέτοντας, αφαιρώντας ή τροποποιώντας τιμές. 2) Δημιουργήστε μια δυναμική λίστα τιμών που περιέχει τις διαθέσιμες κατηγορίες προϊόντων με select πάνω στον πίνακα category. select category_name cat_name, id cat_id from category order by 1 Στην συνέχεια, δημιουργήστε μια λίστα επιλογής που χρησιμοποιεί την δυναμική αυτή λίστα τιμών, και επιτρέπει την αναζήτηση προϊόντων που ανήκουν σε μια συγκεκριμένη κατηγορία (ή στο σύνολο των κατηγοριών). Τέλος, θα πρέπει να τροποποιήσετε κατάλληλα και τον κώδικα (select) που δημιουργεί το report του καταλόγου προϊόντων. Μ.Μάντακας Σχεδιασμός Πληροφοριακών Συστημάτων - Συμπλήρωμα, Έκδοση 19/2/2011 3/7
Προσθήκη 2 - Άσκηση Χρήση view Ορίστε στην βάση ένα view για τον κατάλογο προϊόντων. create or replace view product_catalog as select p.image_id, p.id, p.product_name, p.short_description, c.category_name, to_char( p.list_price ) char_list_price, 'add_to_cart_image' add_to_cart_image from product p, category c where p.category_id = c.id ; Στην συνέχεια, δημιουργήστε το report του καταλόγου προϊόντων με select πάνω στο view αυτό. select * from product_catalog ; Προσθήκη 3 Σελ. 223. Η απάντηση στην Άσκηση είναι η παρακάτω: select p.id, -- Use cases 1.2.1a, 1.2.2a p.product_name, p.short_description, p.list_price ' euro' price, sc.quantity, sc.product_id delete_product, -- Use case 1.2.5a sc.product_id store_product_id, -- Use case 1.2.6a from product p, SC_pers sc where p.id = sc.product_id and sc.customer_id = :f_authenticated_customer_id Μ.Μάντακας Σχεδιασμός Πληροφοριακών Συστημάτων - Συμπλήρωμα, Έκδοση 19/2/2011 4/7
Προσθήκη 4 - Άσκηση Επιλογή πολλαπλών γραμμών report με array από checkboxes. Διαδικασία Save for later Στο καρότσι αγορών, προσθέστε την λειτουργία ταυτόχρονης επιλογής πολλαπλών προϊόντων και αποθήκευσης για μελλοντική χρήση (save for later, βλ. Amazon.com). Η λειτουργία αυτή αφαιρεί τα προϊόντα από το καρότσι και τα τοποθετεί σε ένα άλλο είδος καροτσιού. Αυτό επιτρέπει στον χρήστη να διατηρήσει, για πιθανή μελλοντική αγορά, προϊόντα που δεν επιθυμεί να αγοράσει άμεσα. Στο report του μόνιμου (ή του προσωρινού) καροτσιού ορίζουμε ένα array checkboxes με χρήση της συνάρτησης APEX_ITEM.CHECKBOX: select p.id, p.product_name, p.short_description, p.list_price ' euro' price, sc.quantity, sc.product_id delete_product, sc.product_id store_product_id, APEX_ITEM.CHECKBOX ( 3, p.id ) save_for_later from product p, SC_pers sc where p.id = sc.product_id and sc.customer_id = :f_authenticated_customer_id Προσθέστε ένα process Save_for_later και ένα κουμπί Save for later και που θα καλεί το process. Χρησιμοποιείστε το array apex_application.g_f03(i) για να βρήτε τα επιλεγμένα checkboxes ( ο αριθμός 03 του array έχει καθοριστεί από το πρώτο argument, 3, της συνάρτησης APEX_ITEM.CHECKBOX ). Υλοποιείστε το ειδικό αυτό καρότσι με κάποιoν τρόπο. Για παράδειγμα, σκεφτείτε την δυνατότητα χρήσης ενός επιπλέον χαρακτηριστικού, status, στα καρότσια (μόνιμο και προσωρινό), βλ. και σελ.206. Το status, ας πούμε 3, δηλώνει το πραγματικό καρότσι. Το status, ας πούμε 4, δηλώνει το ειδικό καρότσι Save for later. Μ.Μάντακας Σχεδιασμός Πληροφοριακών Συστημάτων - Συμπλήρωμα, Έκδοση 19/2/2011 5/7
Προσθήκη 5 - Άσκηση Εναλλακτικός σχεδιασμός προσωρινού καροτσιού αγορών Προτείνω έναν δεύτερο εναλλακτικό τρόπο υλοποίησης του προσωρινού καροτσιού αγορών: Το προσωρινό καρότσι θα υλοποιηθεί από έναν πίνακα στο σχήμα μας, που έχει τα ίδια χαρακτηριστικά με το μόνιμο καρότσι, εκτός από τον κωδικό συνεδρίας (session_id) που αντικαθιστά τον κωδικό πελάτη: create table SC_temp ( id number(38) not null, product_id number (12) not null, session_id number not null, quantity number (5) not null, status char(1) not null ) ; Αγνοήστε προς το παρόν το χαρακτηριστικό status. Ο κωδικός συνεδρίας είναι ξένο κλειδί που αναφέρεται στο πρωτεύον κλειδί id του πίνακα WWV_FLOW_SESSIONS$ που αποθηκεύει δεδομένα της συνεδρίας και βρίσκεται στο σχήμα FLOWS_030100 της Apex: alter table SC_temp add constraint SC_temp_customer_id_FK foreign key ( session_id ) references FLOWS_030100.WWV_FLOW_SESSIONS$ ( id ) on delete cascade ; Ο περιορισμός ξένου κλειδιού on delete cascade εξασφαλίζει την αυτόματη διαγραφή των γραμμών του προσωρινού καροτσιού που αντιστοιχούν σε μια συνεδρία που έληξε, όταν η Apex διαγράφει την αντίστοιχη γραμμή συνεδρίας από τον πίνακα συνεδριών. Για να γίνει όμως η παραπάνω αναφορά του ξένου κλειδιού από το δικό μας σχήμα στο χαρακτηριστικό του πίνακα του σχήματος της Apex, πρέπει να έχει αποδοθεί στο σχήμα μας ένα προνόμιο (δικαίωμα, priviledge) αναφοράς (references) στο χαρακτηριστικό αυτό. Αυτό γίνεται εκτελώντας, πριν την εντολή alter table, την παρακάτω εντολή grant: Μ.Μάντακας Σχεδιασμός Πληροφοριακών Συστημάτων - Συμπλήρωμα, Έκδοση 19/2/2011 6/7
grant references ( id ) on FLOWS_030100.WWV_FLOW_SESSIONS$ to t1 ; όπου θα αντικαταστήσετε το t1 με το όνομα του δικού σας σχήματος. Η εκτέλεση της εντολής grant πρέπει να γίνει από χρήστη με κατάλληλο δικαίωμα. Ένας τέτοιος χρήστης είναι ο sys της βάσης. Επομένως, τα λογικά βήματα είναι τα εξής: - Συνδεόμαστε ως χρήστης sys στην βάση (χρησιμοποιώντας για παράδειγμα τον SQL-Developer, βλ. Παράρτημα 2 των Σημειώσεων). - Εκτελούμε την εντολή grant - Συνδεόμαστε στο δικό μας σχήμα (χρησιμοποιώντας για παράδειγμα τον SQL- Developer) - Δημιουργούμε τον πίνακα και τους περιορισμούς συμπεριλαμβανομένου και του ξένου κλειδιού. - Προσθέτουμε ένα sequence και ένα trigger για την αυτόματη δημιουργία της τιμής του πρωτεύοντος κλειδιού πριν κάθε εισαγωγή νέας γραμμής με insert. Αφού φτιάξουμε τα αντικείμενα της βάσης, πρέπει να προσθέσουμε και κώδικα επιχειρησιακής λογικής. Ο κώδικας αυτός είναι ανάλογος με τον κώδικα για το μόνιμο καρότσι. Πρέπει, τέλος να δημιουργήσουμε και την κατάλληλη διεπαφή χρήστη: στην σελίδα του καροτσιού, ένα νέο region με ένα report που θα δημιουργείται με select πάνω στον πίνακα του προσωρινού καροτσιού (και τον πίνακα προϊόντων). Αναζητήστε την εντολή grant στο εγχειρίδιο SQL Language Reference της Oracle. Συνδεθείτε ως χρήστης sys με χρήση του SQL-Developer και αναζητήστε στους άλλους χρήστες (other users) το σχήμα της Apex FLOWS_030100, τον πίνακα WWV_FLOW_SESSIONS$, και το χαρακτηριστικό id. Μ.Μάντακας Σχεδιασμός Πληροφοριακών Συστημάτων - Συμπλήρωμα, Έκδοση 19/2/2011 7/7