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

 

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

Kανονικοποίηση Βάσης Προϊόντων

Îåêßíçóå áðü ôï ìÝëïò JohnDous. Τελευταία δημοσίευση από το μέλος cap στις 02-09-2006, 20:23. Υπάρχουν 7 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  02-06-2006, 20:57 13563

    Kανονικοποίηση Βάσης Προϊόντων

    Γεια σας. Δημιουργώ μια βάση και βρίσκομαι στην κανονικοποίηση.Το πρόβλημα που έχω είναι το εξής:  Υπάρχει μια οντότητα ΠΡΟΪΟΝΤΑ όπου καταχωρεί τα προϊόντα ενός καταστήματος. Κάποια από τα προϊόντα έχουν τελείως διαφορετικά χαρακτηριστικά οπότε δεν μπορούν να αποθηκευτούν όλα τα προϊόντα σε αυτόν τον πίνακα. Έχω σκεφτεί να δημιουργήσω ένα ξεχωριστό πίνακα για κάθε τύπο προιόντος που θα κρατάει τα extra χαρακτηριστικά.
    Παράδειγμα:                  _______________
     _____________           |__PRODUCTS___|
    |_CATEGORIES_|          |ProductID          |<--.
    |CategoryID      |<-----<|CategoryID        |    |
    |CategoryName |          |ProductName     |    |
                                       |ProductPrice      |    |
                                       _______________     |
                                       |____CPU______|     |
                                       |ProductID          |>--+
                                       |GHz                  |     |
                                       |Socket              |     |
                                       |FSB                  |     |
                                       _______________      |
                                       |____RAM______|     |
                                       |ProductID          |>--+
                                       |Size                  |     |
                                       |Timings             |     |
                                       |Pins                  |     |
                                       _______________      |
                                       |__KEYBOARD___|     |
                                       |ProductID          |>--+
                                       |Keys                 |
                                       |Color                |

    Στην περίπτωση όμως μίας αναζήτησης το select θα πρέπει να περιέχει και τους πίνακες PRODUCTS και κάποιον άλλο πχ CPU. Έχετε να μου προτείνετε κάποια καλύτερη λύση στην κανονικοποίηση;

  •  02-06-2006, 22:55 13566 σε απάντηση της 13563

    Απ: Kανονικοποίηση Βάσης Προϊόντων

    Θα μπορούσες να έχεις Categories και Products όπως τώρα. Κατόπιν να βάλεις έναν πίνακα ProductTypes (RAM, Keyboards, CPUs, κλπ)  με FK στον Products. Έτσι θα ξέρεις τo κάθε product σε τι product type αντιστοιχεί. Κατόπιν να φτιάξεις έναν άλλο πίνακα ProductCharacteristics που θα έχει όλα τα χαρακτηριστικά (από όλα τα products, δηλαδή GHZ, Socket, FSB, Size, Timings, Pins, Keys, Color, κλπ) ο οποίος θα συνδέεται με μία σχέση many-to-many με τον Products. Με αυτόν τον τρόπο θα έχεις όλα τα products μαζεμένα και ένα product της κατηγορίας Keyboard για παράδειγμα, θα σχετίζεται μόνο με τα χαρακτηριστικά (μέσω του many-to-many relation) που το αφορούν.


    Vir prudens non contra ventum mingit
  •  03-06-2006, 11:48 13574 σε απάντηση της 13563

    Απ: Kανονικοποίηση Βάσης Προϊόντων

    Ευχραριστώ για το ενδιαφέρον. Στην Περίπτωση όμως που έχω 200 προϊόντα με 5 διαφορετικά χαρακτηριστικά το καθένα, ο πίνακας ProductCharacteristics θα πρέπει να έχει 1000 πεδία εκ τον οποίον θα χρησιμοποιούνται τα 5 για το κάθε προϊόν. Δεν μου ακούγεται πολύ σωστό. Κάποια άλλη λύση?
  •  03-06-2006, 12:46 13577 σε απάντηση της 13574

    Απ: Kανονικοποίηση Βάσης Προϊόντων

    Ίσως να μην το εξήγησα καλά... O πίνακας ProductCharacteristics δεν θα έχει ως πεδία τα χαρακτηριστικά αλλά ως εγγραφές. Κάθε εγγραφή θα είναι δύο πεδία, ας πούμε το ProductCharacteristicID και το CharacteristicName. Δηλαδή θα έχει 1000 εγγραφές. Με αυτόν τον τρόπο δεν θα χρειάζεται να μεταβάλεις καθόλου το schema της βάσης σε περίπτωση που προσθέτεις νέα προϊόντα. Σε περίπτωση που δεν έχω γίνει κατανοητός, μπορώ να σου φτιάξω μια τέτοια sample βάση σε Access για να πάρεις μια ιδέα...
    Vir prudens non contra ventum mingit
  •  03-06-2006, 13:18 13579 σε απάντηση της 13563

    Απ: Kανονικοποίηση Βάσης Προϊόντων

    Και τα extra χαρακτηριστικά που θα αποθηκεύονται? Δηλ το 2,4 για το GHz το 775 για το Socket? Ναι αν έφτιαχνες μια sample βάση σε access θα βοηθούσε.
  •  03-06-2006, 13:31 13580 σε απάντηση της 13579

    Απ: Kανονικοποίηση Βάσης Προϊόντων

    Ουπς, ναι, ξέχασα να το γράψω, η τιμή του κάθε χαρακτηριστικού (ας πούμε CharacteristicValue) θα πηγαίνει ως άλλο ένα πεδίο στον μεσαίο πίνακα από το many-to-many relation. Μόλις ευκαιρίσω θα φτιάξω τη sample βάση (είμαι πνιγμένος αυτές τις μέρες)...


    Vir prudens non contra ventum mingit
  •  03-06-2006, 23:21 13585 σε απάντηση της 13579

    Απ: Kανονικοποίηση Βάσης Προϊόντων

    Συνημμένα: acme2.zip

    Μέχρι ο Μάνος να φτιάξει μια βάση ακριβώς για την περιπτωσή σου, σου παραθέτω μία παρόμοια που έχω πρόχειρη.

    ACME2

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

    ACME2 Database Model Diagram

    Το πρόβλημα που προσπαθεί να λύσει, είναι παρόμοιο με το πρόβλημα ενός ηλεκτρονικού καταστήματος που πουλάει πολλά είδη προϊόντων. Στην συγκεκριμένη περίπτωση δεν έχουμε προϊόντα, αλλά μπαχαρικά. Κάθε μπαχαρικό (πίνακας agr_articles) – ρίγανη, βασιλικός, χαμομήλι – έχει ιδιότητες που τις έχουμε χωρίσει σε δυο κατηγορίες – τις δυναμικές και τις στατικές.

    Για την ευκολία μας έχουμε καθορίσει ότι κάθε μπαχαρικό μπορεί να έχει 10 δυναμικές ιδιότητες και ν στατικές. Η διαφορά μεταξύ των δυναμικών και των στατικών ιδιοτήτων, είναι ότι οι στατικές είναι εισαγωγή ελεύθερου κειμένου και ορίζονται σε ένα μπαχαρικό, και αυτόματα περνάνε σε κάθε προϊόν που βασίζεται σε αυτό. Αντίθετα οι δυναμικές είναι επιλογές μέσα από μια προκαθορισμένη λίστα τιμών, και ορίζονται μεν ποιες αντιστοιχούν σε κάθε μπαχαρικό και παίρνουν διαφορετικές τιμές δε σε κάθε προϊόν. Ο συνδυασμός των στατικών και την δυναμικών ιδιοτήτων και ενός μπαχαρικού, μας καθορίζει ένα προϊόν με μοναδικό SKU (πίνακας agr_article_product) που είναι και το τελικό προϊόν μας προς πώληση.

    Να ξεκινήσω την εξήγηση της βάσης από τα εύκολα, τις στατικές ιδιότητες. Κάθε μπαχαρικό έχει ν στατικές ιδιότητες που καθορίζονται μέσα στον πίνακα agr_attributes. Για κάθε μπαχαρικό που απαιτεί να έχει τιμή σε μία από τις ιδιότητες, στον πίνακα agr_article_attributes υπάρχουν εγγραφές που ορίζουν τιμή (attrib_value) για την συγκεκριμένη ιδιότητα (attrib_id) και το συγκεκριμένο μπαχαρικό (article_id).

    Τις δυναμικές ιδιότητες τις ορίζουμε ως εξής: Για κάθε μπαχαρικό, «γεμίζουμε» όσες από τις 10 «θέσεις» για τις δυναμικές ιδιότητες θέλουμε. Έτσι σε κάθε μία από τις «θέσεις» μπορούμε να ορίσουμε να αντιστοιχεί μια κατηγορία – class. Αυτές οι αντιστοιχίες αποθηκεύονται μέσα σε κάθε εγγραφή μπαχαρικού στο πίνακα agr_articles στις θέσεις article_class_00, article_class_01article_class_09. Στον ορισμό κάθε προϊόντος, η τιμή της κάθε ορισμένης κατηγορίας επιλέγεται από τον τιμές που επιστρέφονται από τον συνδυασμό agr_articles.article_class_xx = agr_classificationvalues.class_id, και αποθηκεύεται στο agr_article_product. article_class_xx.

    Τέλος κάθε προϊόν έχει μοναδικό sku, όπου είναι αυτό που ξέρει ο πελάτης και ο πωλητής για να αναφέρονται στο ίδιο προϊόν. Η βάση δεν είναι πλήρως υλοποιημένη – δεν υπάρχουν πεδία για την τιμή προϊόντος ή αν το προϊόν είναι διαθέσιμο, μιας και είχε φτιαχτεί για λόγους επίδειξης, αλλά πιστεύω ότι εύκολα κάποιος αφού καταλάβει την δομή της βάσης μπορεί να τα προσθέσει.

    Συνημμένο στο μήνυμα είναι ένα αρχείο που περιέχει την βάση σε MS Access, το database model σε Visio και ένα Word document με τα παραπάνω.

     

    George J.


    George J. Capnias: Χειροπρακτικός Υπολογιστών, Ύψιστος Γκουράρχης της Κουμπουτερολογίας
    w: capnias.org, t: @gcapnias, l: gr.linkedin.com/in/gcapnias
    dotNETZone.gr News
  •  02-09-2006, 20:23 16226 σε απάντηση της 13563

    Απ: Kανονικοποίηση Βάσης Προϊόντων

    Θα ήθελα, αν δεν έχουμε κάτι νεότερο σχετικά με το ερώτημα, είτε να κλείσουμε το θέμα είτε να επεκταθούμε περαιτέρω.
    Σωτήρης Φιλιππίδης

    DotSee Web Services

    View Sotiris Filippidis's profile on LinkedIn

    DotNetNuke them!
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems