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

 

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

Database Problems

Îåêßíçóå áðü ôï ìÝëïò Bill . Τελευταία δημοσίευση από το μέλος sakis_drm στις 21-02-2010, 03:32. Υπάρχουν 4 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  29-01-2010, 23:23 56799

    Database Problems


      Έχω ένα site να κάνω όπου στο admin κομμάτι θα πρέπει ο διαχειριστής να προσθέτει κάποια προϊόντα στην βάση και κατόπιν ο χρήστης θα μπορεί να κάνει click σε κάθε προϊόν και να βλέπει τα χαρακτηριστικά του .Ως εδώ όλα καλά .... Τι κάνω όμως στην περίπτωση που ένα προϊόν έχει υποκατηγορίες και ενθετες υποκατηγορίες ? Τι εννοώ πχ έχουμε την κατηγορία pda mymark και η κατηγορία pda mymark (όταν θα κάνω click πάνω της) θα μου εμφανίζει και τις υποκατηγορίες πχ ( τρεις τέσσερεις άλλες subcategories) και μετά όταν θα κάνω click σε μια απο αυτές τις υποκατηγορίες θα μου εμφανίζει τα χαρακτηριστικά του προϊόντος. Υπόψιν και κάθε υποκατ. μππορεί να έχει και άλλες υποκατηγορίες το βάθος είναι άγνωστο δηλ.

    Πως θα μπορούσα να το κάνω αυτό σχεδιαστικά στην βάση ? ακούω προτάσεις

    select DATEDIFF(dd,GetDate(),'20140731') AS EΠΟΜΕΝΕΣ_ΔΙΑΚΟΠΕΣ
  •  30-01-2010, 00:42 56800 σε απάντηση της 56799

    Απ: Database Problems

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


    Σωτήρης Φιλιππίδης

    DotSee Web Services

    View Sotiris Filippidis's profile on LinkedIn

    DotNetNuke them!
  •  30-01-2010, 10:36 56805 σε απάντηση της 56800

    Απ: Database Problems

    Φιλε cap δε σε καταλαβαίνω τι εννοείς "χρειάζεσαι και ένα ακόμα πεδίο που θα είναι foreign key στον ίδιο πίνακα και θα δηλώνει την parent κατηγορία" δηλαδή ο πίνακας Κατηγορίες θα έχει ένα id_category και ένα foreign key το parent απλά δεν καταλαβαίνω το parent πως θα μου δώσει την δυνατότητα να έχω απεριόριστο αριθμό επιπέδων? H θα έχει διπλό κλειδί.?

    Πχ id_category   parent
              1                2
              2                2
              3                3    Αν κατάλαβα καλά στην πρώτη κατηγορία id_category = 1 έχω 2 υποκατηγορίες . Αν ναί τότε πως θα αναπαραστήσω το γεγονός ότι απο τις 2 υποκατηγορίες μπορώ να έχω και ένθετες υποκατηγορίες ? ή δεν υπάρχει λόγος ? απλά βάζω το πλήθος των υποκατηγοριών...?
    -

    select DATEDIFF(dd,GetDate(),'20140731') AS EΠΟΜΕΝΕΣ_ΔΙΑΚΟΠΕΣ
  •  30-01-2010, 11:06 56806 σε απάντηση της 56799

    Απ: Database Problems

    Ο SQL Server 2008 υποστηρίζει data type για hierarchical data (hierarchyid). Αν χρησιμοποιείς άλλη έκδοση ή άλλη βάση δεδομένων ρίξε μια ματιά εδώ για να πάρεις μια ιδέα της θεωρίας.


    Ακόμα κι ένας άνθρωπος μπορεί ν' αλλάξει τον κόσμο. Μη θέλεις να κυβερνήσεις. Απλά δείξε το μονοπάτι κι ο κόσμος θ' ακολουθήσει!!
  •  21-02-2010, 03:32 57220 σε απάντηση της 56805

    Απ: Database Problems

    Έλα Bill,

    εννοεί ότι ο πίνακας κάνει self join. Δηλαδή όπως έχουμε την περίπτωση που ορίζουμε την μητρική εταιρία μιας άλλης εταιρίας, αν θυμάσαι! Wink 
    Δηλαδή στη γραμμή της κάθε εταιρίας υπάρχει ένα πεδίο που αναφέρεται στο id κάποιας άλλης εταιρίας που είναι μητρική της (η οποία φυσικά είναι γραμμή του ίδιου πίνακα).

    Στο παράδειγμα σου, κάθε κατηγορία έχει ένα πεδίο στη γραμμή της, που αναφέρεται σε ΜΙΑ άλλη κατηγορία (εγγραφή στον ίδιο πίνακα), η οποία είναι πατέρας της και "κρέμεται" από αυτήν στο δέντρο.

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