Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

Υλοποίηση sql query..ποιά λύση είναι αποδοτικότερη ;;

Îåêßíçóå áðü ôï ìÝëïò xian_at. Τελευταία δημοσίευση από το μέλος KelMan στις 24-11-2005, 01:09. Υπάρχουν 3 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  23-11-2005, 13:33 7262

    Υλοποίηση sql query..ποιά λύση είναι αποδοτικότερη ;;

    Σε μια βάση με προϊόντα , έχουμε εναν πίνακα items, που περιέχει τις επιμέρους πληροφορίες για κάθε ένα από αυτά..Επίσης έχουμε έναν ακόμα πίνακα  που περιέχει  extra πληροφορίες και έχει όσες εγγραφές έχει και ο πίνακας items. Ο πίνακας extra έχει κύριο κλειδί τον κωδικό του προϊόντος και εκτός των άλλων, έχει ένα πεδίο internet (boolean) το οποίο σηματοδοτεί το αν θα φαίνεται στο internet αυτο το προϊόν ή όχι.
    H ερώτηση σχετίζεται με την δημιουργία ενός δυναμικού καταλόγου προϊόντων στο internet, όπως έχουν τα περισσότερα e-shops. Για το site χρησιμοποιώ asp και ψάχνω μια αποδοτική λύση για τα queries μου.


    Μια λύση θα ήταν να "τραβάω" από τη βάση όλα τα προϊόντα της εκάστοτε κατηγορίας και μετά για κάθε προϊόν να κάνω query στον πίνακα extra για το αν είναι στο internet ή όχι. Αυτή η λύση όμως σημαίνει και πολλά queries...
    Υπάρχει κάτι καλύτερο;;;;; θεωρείστε οτι μπορώ να κάνω το οτιδήποτε στη βάση εκτός από το να προσθέσω το πεδίο internet στον βασικό πίνακα items.

  •  23-11-2005, 13:51 7263 σε απάντηση της 7262

    Απ: Υλοποίηση sql query..ποιά λύση είναι αποδοτικότερη ;;

    Υπάρχει κάποιος λόγος που δεν μπορείς να χρησιμοποιήσεις και τους δύο πίνακες στο ίδιο SELECT? Αλλιώς το παρακάτω θα πρέπει να σου επιστρέφει ό,τι θες.

    select *
    from
    items, extras
    where items.ItemID=extras.ItemID
    and Items.Category='MyCategory'
    and extras.internet=1
    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  23-11-2005, 16:08 7270 σε απάντηση της 7263

    Απ: Υλοποίηση sql query..ποιά λύση είναι αποδοτικότερη ;;

    Αυτό που έχει γίνει είναι οτι οι δύο πίνακες έχουν σχέση 1-1 μεταξύ τους (δηλαδή για κάθε εγγραφή του πίνακα Α υπάρχει υποχρεωτικά μία και μόνο μία αντίστοιχη εγγραφή στον πίνακα Β). Στην αργκώ, αυτό λέγεται "σπάσιμο" (σπας ένα μεγάλο πίνακα σε δύο πίνακες 1-1 για να αποφύγεις πράγματα όπως το να φτάσεις το maximum row size (8060 bytes, αν θυμάμαι καλά). Αλλοι το αποκαλούν de-normalization.

    Ομως, το να ανακτήσεις δεδομένα που συνδυάζουν στήλες και των δύο πινάκων είναι απλή υπόθεση, όπως έδειξε και ο Παναγιώτης παραπάνω. Αυτό που κάνει ο Παναγιώτης είναι ουσιαστικά ένα JOIN. Μπορεί λοιπόν να γραφτεί και έτσι:

    select items.myfield1,items.myfield2, extras.myfield2
    from items
    inner join extras
    on items.id = extras.itemid
    where
    extras.internet = 0
    and items.category='MyCategory'

    Οπου φυσικά τα myfield1, myfield2 κλπ είναι πεδία είτε του πίνακα extras είτε του πίνακα items και μπορείς να βάλεις όσα και όποια θέλεις είτε από τον ένα μονο πίνακα είτε και από τους δύο.

    Εναλλακτικά (αν και δεν το προτείνω), θα μπορούσες να φτιάξεις μια view που να "ενώνει" μέσω ενός join και τους δύο πίνακες με τα πεδία που επιθυμείς να φαίνονται, και να διαλέγεις από εκεί (να κάνεις το select επάνω στη view) με απλά κριτήρια σαν να χρησιμοποιούσες ένα μόνο πίνακα
    Σωτήρης Φιλιππίδης

    DotSee Web Services

    View Sotiris Filippidis's profile on LinkedIn

    DotNetNuke them!
  •  24-11-2005, 01:09 7281 σε απάντηση της 7262

    Απ: Υλοποίηση sql query..ποιά λύση είναι αποδοτικότερη ;;

    Σωτήρη γιατί δεν σου αρέσει το view;
    Εγώ πάντως θα πήγαινα ένα βήμα παραπέρα και θα καλούσα μια stored procedure που θα επέστρεφε τα data που με ενδιαφέρουν (δηλαδή θα περιείχε μέσα τα queries που ανέφεραν οι σεβαστοί συνModerators). Με αυτόν τον τρόπο θα ήμουν καλυμμένος για οποιαδήποτε μεταβολή στους πίνακες, αρκεί να παραμένει ίδια η δομή των εγγραφών που επιστρέφονται. Και βέβαια, είναι και το θέμα του performance, κλπ, κλπ.
    Vir prudens non contra ventum mingit
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems