Το πρόβλημά σου είναι οτι θέλεις να αναπαραστήσεις μια δενδρική δομή. Αυτό μπορεί εύκολα να υλοποιηθεί (με την παραδοχή οτι κάθε υποκατηγορία θα έχει μόνο ένα "μπαμπά", δηλαδή δεν θα ανήκει ταυτόχρονα σε περισσότερες από μια κατηγορίες), δημιουργώντας ένα πίνακα κατηγοριων οπου κάθε κατηγορία θα έχει ένα unique id, ένα όνομα, οτιδήποτε άλλο χρειάζεσαι και ένα ακόμα πεδίο που θα είναι foreign key στον ίδιο πίνακα και θα δηλώνει την parent κατηγορία. Ετσι, μπορείς να αναπαραστήσεις απεριόριστο αριθμό επιπέδων (π.χ. ζητώντας την κατηγορία νο. 5 ξέρεις οτι έχει π.χ. 3 υποκατηγορίες - τις 6,7 και 8 - που την έχουν parent, και ξέρεις και η ίδια η 5 ποιά parent υποκατηγορία έχει - π.χ. την 4, οπότε ξέρεις τη θέση σου μέσα στο δέντρο). Η σχέση μιας κατηγορίας με τις υποκατηγορίες της είναι πάντα ενα-προς-πολλά, ενώ με την πατρική της είναι πάντα ενα-προς-ενα.
Από εκεί και πέρα μπορείς να συσχετίσεις ένα προϊόν με μια κατηγορία ή με περισσότερες, αναλόγως τη σχεδίαση που θα κάνεις. Για την πρώτη περίπτωση αρκεί ένα Foreign key στον πίνακα των προιοντων σου που θα περιέχει το id της κατηγορίας που ανήκει το προϊόν. Για τη δεύτερη περίπτωση, χρειάζεσαι ενδιάμεσο πίνακα μια και αναπαριστάς σχέση πολλα-προς-πολλά.
Σωτήρης Φιλιππίδης
DotSee Web Services