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

Το πρόβλημα που προσπαθεί να λύσει, είναι παρόμοιο με το πρόβλημα ενός ηλεκτρονικού καταστήματος που πουλάει πολλά είδη προϊόντων. Στην συγκεκριμένη περίπτωση δεν έχουμε προϊόντα, αλλά μπαχαρικά. Κάθε μπαχαρικό (πίνακας 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_01 … article_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.