chrism4111 Δημοσ. 6 Ιουνίου 2010 Δημοσ. 6 Ιουνίου 2010 Γεια σας και πάλι... Λοιπον ... θα ηθελα διαφορες γνωμες για την παρακάτω ερωτηση .... Φτιαχνω ενα e-shop οχι για επαγγελματικους σκοπους ακομα αλλα για εκπαιδευτικους , σε asp.Net και C#.. Και ειμαι στην φάση του να τραβηξω δεδομενα απο την βαση σε formviews για να εμφανιζονται τα details των προιοντων μου... Δηλδη εχω για προιοντα ας πουμε (Υπολογιστες , επεξεργαστες , μνημες Ram , Βιβλια και ταινιες )... Καθε κατηγορια απο τις παραπανω εχει και δικα της διαφορετικα details.... Πως ειναι ο πιο σωστος τροπος για να φτιαξω την βαση μου(Sql Server )(Δηλαδη την δομη.Τι tables να εισάγω) *Εχω φτιαξει ως τωρα τους συγκεκριμενους πινακες Product(ολα τα κοινα πεδια που μπορουν να εχουν ολες οι κατηγοριες,με ενα κλειδι) Ολοι οι αλλοι πινακες συνδεονται με τον Product μεσω του παιδιου του ονοματος του προιοντος αφου ειναι μοναδικο DesktopDetails(χωρις κλειδι) MemoryDetail (χωρις κλειδι) κ.ο.κ για τις αλλες κατηγοριες... Το κανω θεμα γιατι δεν ειμαι σιγουρος αν ειναι σωστη η δομη αυτη ... Και επιση γιατι με τετοια δομη δεν βρισκω τροπο για να αποφυγω την δημιουργια διαφορετικων σελιδων για την εμφανιση των αντικειμενων (δηλ 10 κατηγοριες ? και 10 διαφορετικες aspx σελιδες που μου φενεται πολυ κουραστικο και περιττο)
zinas Δημοσ. 6 Ιουνίου 2010 Δημοσ. 6 Ιουνίου 2010 Όπως καταλαβαίνεις είναι αρκετά μεγάλο θέμα. Πολύ χοντρικά, μπορείς να κάνεις το εξής: 3 πίνακες, products, attributes και attributes_to_products. Ο τελευταίος θα έχει τις στήλες id, product_id, attribute_id και value. Οπότε αν έχει το προϊόν iPhone και το attribute Μέγεθος δίσκου, τα συνδέει μέσω του τρίτου πίνακα και βάζεις value 32GB. Το μεγαλύτερο πρόβλημα που είχα αντιμετωπίσει εγώ όταν είχα φτιάξει ένα e-shop για ένα πελάτη, ήταν τι γίνεται με προϊόντα που έχουν άλλη τιμή ανάλογα με τα χαρακτηριστικά τους. Δηλαδή στο παραπάνω παράδειγμα, άλλη τιμή έχει το 32gb iPhone και άλλη το 16gb. Πολλά open source e-shop, απλά εισάγουν άλλο προϊόν και αυτό σου προτείνω κι εσένα (δηλαδή να έχεις 2 iPhone στον πίνακα products)
chrism4111 Δημοσ. 6 Ιουνίου 2010 Μέλος Δημοσ. 6 Ιουνίου 2010 Βασικά εγω δεν εχω προβλημα να εισάγω δυο φορες ενα αντικειμενο ιδιας μαρκας και ιδιας κατηγοριας με την προυποθεση οτι καποιο απο τα attr ειναι διαφορετικο .... Οντως ενας τριτος πινακας με τα ξενα κλειδια βοηθαει πολυ και για αλλα ερωτηματα που θελω να κανω ...... Ερωτηση τωρα θα ηταν χαζομαρα ; Να γεμισω την σελιδα με πολλα formview οπου αυτα θα ειναι ολα visible = false και enable = false και αναλογα με το ερωτημα στο querystring να κανει ορατο καποιο formview; Οταν κάποιο αντικείμενο ειναι enable = false αυτο φορτωνει;
bikey77 Δημοσ. 6 Ιουνίου 2010 Δημοσ. 6 Ιουνίου 2010 Όταν ένα προϊόν υπάρχει σε δύο ή περισσότερες διαφορετικές εκδόσεις (στο παράδειγμά σου το iPhone με 16, 32GB) τότε η λύση είναι η χρήση δύο πινάκων, products, productVersions. Στον products αποθηκεύουμε κωδικό προϊόντος, όνομα, ΓΕΝΙΚΗ περιγραφή, μάρκα, γενικά χαρακτηριστικά κλπ και στον productVersions το barcode του κάθε προϊόντος (άλλο barcode έχει το 16άρι και άλλο το 32άρι), την τιμή, την ΕΙΔΙΚΗ περιγραφή (που διαχωρίζει το ένα από το άλλο) και ότι άλλο μας χρειάζεται (πχ stock, τιμή προσφοράς κλπ). Στη σελίδα του προϊόντος γράφεις ένα query με join και έχεις για κάθε προϊόν, όλες τις διαθέσιμες εκδόσεις, παραλλαγές κλπ. 1
chrism4111 Δημοσ. 6 Ιουνίου 2010 Μέλος Δημοσ. 6 Ιουνίου 2010 Όταν ένα προϊόν υπάρχει σε δύο ή περισσότερες διαφορετικές εκδόσεις (στο παράδειγμά σου το iPhone με 16, 32GB) τότε η λύση είναι η χρήση δύο πινάκων, products, productVersions. Στον products αποθηκεύουμε κωδικό προϊόντος, όνομα, ΓΕΝΙΚΗ περιγραφή, μάρκα, γενικά χαρακτηριστικά κλπ και στον productVersions το barcode του κάθε προϊόντος (άλλο barcode έχει το 16άρι και άλλο το 32άρι), την τιμή, την ΕΙΔΙΚΗ περιγραφή (που διαχωρίζει το ένα από το άλλο) και ότι άλλο μας χρειάζεται (πχ stock, τιμή προσφοράς κλπ). Στη σελίδα του προϊόντος γράφεις ένα query με join και έχεις για κάθε προϊόν, όλες τις διαθέσιμες εκδόσεις, παραλλαγές κλπ. Σωστο το ολο αυτο (και ναι θα το κανω) αλλα αυτο που θέλω να μαθω ειναι το εξης ... Κοιτα τωρα τι σκεφτηκα μηπως θα ηταν καλυτερα να κανω εναν πινακα για καθε attr και με ενα ξενο κλειδι που θα οδηγει στο προιον . Το μονο προβλημα θα ειναι αυτην την φορα ο υπερβολικα μεγαλος ογκος πινακων στην βαση δεδομενων (που αν και δεν εχω σχετικη εμπειρια νομιζω οτι θα ριξει την αποδοση της βασης ). Το παραπανω δεν θα ειναι εφικτο στο να μου εμφανιζει τα δεδομενα μ σε μια και μονο σελιδα ? Συγγνωμη αν ζηταω πολλα αλλα θέλω κατι ξεκαθαρο για να μπορω να συνεχισω και να βασιζομαι πανω σε μια δομη για κατι μελλοντικο...Τι ειναι καλυτερο πολλες σελιδες για την απεικονιση διαφορετικων κατηγοριων η μια τρελα πολυπλοκη βαση δεδομένων? Το e-shop.gr πως δουλευει ?(Νομιζω με διαφορετικη σελιδα ανα κατηγορια) και παλι sorry αν γινομαι κουραστικος......
chrism4111 Δημοσ. 6 Ιουνίου 2010 Μέλος Δημοσ. 6 Ιουνίου 2010 5-6 πίνακες είναι υπερβολικά μεγάλος όγκος? Για το παραπάνω δεν εννουσα 5-6 πινακες αλλα αμα εχω cpu που εχει ενα σωρο attr (χρονισμους , τυπους , και αλλα) καρτες γραφικων με attr ( chipsets , μνημες ,τυπος μνήμης , κ.α) και διαφορες αλλες κατηγοριες και αν κανω ξεχωριστους πινακες για καθε attr θα βγουν αρκετοι. Αν καταλαβες το προβλημα μ ... δεν ειναι η βαση ακριβως αλλα το πως θα ενωσω με ενα ερωτημα τους πινακες και το πως διαφορετικα πεδια θα γινονται bind σε κοινα label..
Aztec Δημοσ. 6 Ιουνίου 2010 Δημοσ. 6 Ιουνίου 2010 Αν πας για πραγματικά δυναμικό e-shop ξεχνάς specific attributes σε στήλες και πας σε rows. Δηλαδή δεν έχεις έναν πίνακα για ειδικά χαρακτηριστικά memory έναν για VGA κτλ. Έχεις έναν πίνακα που περιγράφει τα attrinutes κάθε κατηγορίας ποριόντος. Έχεις εκεί τα label για κάθε προιόν και την σειρά εμφάνισης και έναν πίνακα που θα κρατάει τα values. Άρα αν έχεις έναν πίνακα ως εξής PRODUCT_TYPE_ATTRIBUTES FK_PRODUCT_TYPE SN LABEL SHOW_ORDER 1 1 CLOCK 1 1 2 TECHNOLOGY 2 και έναν PRODUCT_ATTR_VALUES FK_PRODUCT FK_PRODUCT_TYPE FK_PRODUCT_ATTR_SN VALUE 1000 1 1 800Mhz 1000 1 2 DDR2 Τα κοινά χαρακτηριστικά όλων των προιόντων τιμές πριγραφή κτλ τα κρατάς πάνω στο προιόν. Για τα ειδικά χαρακτηριστικά με ένα loop κάνεις display τα LABEL και τις τιμές τους καθώς κάνεις join με τον product_type_attributes. Δεν γράφεις πουθενά labels στο πρόγραμμα καθώς τα παίρνεις και τα δείχνεις όπως είναι απο την βάση. Αυτό είναι αφηρημένο μοντέλο με metadata που περιγράφουν χαρακτηριστικά και σημαίνει " ΕΤΟΙΜΑΣΟΥ ΓΙΑ ΔΥΣΚΟΛΑ QUERIES" και πιο δύσκολο κώδικα. Το σχέδιο που γράφω είναι απλά για να καταλάβεις τι εννοώ καθώς θέλει δουλίτσα.
gkastros Δημοσ. 6 Ιουνίου 2010 Δημοσ. 6 Ιουνίου 2010 Κατψ απο τον Products κρεμασε ενα Prd_details με πεδια -> Product_Code, Detail_description, Detail_value, Detail blah blha Πολυ απη δομη και υποστηριζει οτι συνδιασμο μπορει να προκυψει (-) o details Θα εχει αttributes * products εγγραφες αλλα αν κανεις την πραξη ο αριθμος δεν ειναι τπτ το σημαντικο π.χ για 1000 products me 100 attr to 1 = 100000 recs, tpt
_tasos Δημοσ. 6 Ιουνίου 2010 Δημοσ. 6 Ιουνίου 2010 Οταν κάποιο αντικείμενο ειναι enable = false αυτο φορτωνει; Ναι φορτώνει. Αυτό που μπορείς να κάνεις είναι σε κάθε control να ελέγχεις αν πρέπει να εμφανιστεί. Οπότε η Page_Load θα τρέχει, αλλά δεν θα φορτώνει π.χ. data από τη βάση δεδομένων. Αλλά αν έχεις στα formview μία sqldatasource και αυτή φορτώνει από μόνη της, τότε να βάζεις το formview visible=false για να μην κάνει bind.
Maniakos Δημοσ. 6 Ιουνίου 2010 Δημοσ. 6 Ιουνίου 2010 Μπορείς να κατεβάσεις το Magento και να μελετήσεις τους πίνακες που έχει ή οποιοδήποτε άλλο shopping cart το οποίο είναι σύγχρονο μιας και όλα κάνουν αυτό που θες να κάνεις και εσύ.
chrism4111 Δημοσ. 6 Ιουνίου 2010 Μέλος Δημοσ. 6 Ιουνίου 2010 Μπορείς να κατεβάσεις το Magento και να μελετήσεις τους πίνακες που έχει ή οποιοδήποτε άλλο shopping cart το οποίο είναι σύγχρονο μιας και όλα κάνουν αυτό που θες να κάνεις και εσύ. To κατεβασα το magento το ανοιγω με easyPHP για να κανω install αλλα μου βγαζει μετα την σελιδα που διαλεγω location , Timezone , Νομισμα δυο σφαλματα . (στην σελιδα δηλαδη configuration) ! PHP Extension "pdo_mysql" must be loaded PHP Extension "curl" must be loaded Τι πρεπει να κανω. ειναι κάποιες ρυθμίσεις στην mysql που δεν εχω κάνει?
Maniakos Δημοσ. 6 Ιουνίου 2010 Δημοσ. 6 Ιουνίου 2010 Στα λέει και η ίδια η PHP τα προβλήματα. Πρέπει να κάνεις edit το php.ini σου και στο extensions section να βγάλεις το comment μπροστά από το pdo_mysql.dll και το php_curl.dll. Restart apache και είσαι έτοιμος.
Lykos22 Δημοσ. 7 Ιουνίου 2013 Δημοσ. 7 Ιουνίου 2013 Συγνώμη που το ξεθάβω το θέμα, αλλά επειδή και εγώ κάνω κάτι παρόμοιο αυτόν τον καιρό, όπως ο chrism4111 (με τη διαφορά ότι χρησιμοποιώ CodeIgniter ), είχα πάρει από την αρχή σαν 'οδηγό' το plaisio.gr, όπου η γενική δομή μίας σελίδας που δείχνει ένα προιόν είναι εικόνα/ες του προιόντος, περιγραφή, χαρακτηριστικά και αξιολογήσεις. Από τα σχόλια των zinas και bikey77 έφτιαξα τους εξής πίνακες: -- -------------------------------------------------------- -- -- Table structure for table `attributes` -- CREATE TABLE IF NOT EXISTS `attributes` ( `attr_id` int(10) unsigned NOT NULL AUTO_INCREMENT, `attribute` varchar(100) NOT NULL, PRIMARY KEY (`attr_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; -- -------------------------------------------------------- -- -- Table structure for table `attributes_to_products` -- CREATE TABLE IF NOT EXISTS `attributes_to_products` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `attr_id` int(10) unsigned NOT NULL, `product_id` int(10) unsigned NOT NULL, `value` varchar(50) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; -- -------------------------------------------------------- -- -- Table structure for table `products` -- CREATE TABLE IF NOT EXISTS `products` ( `product_id` int(10) unsigned NOT NULL AUTO_INCREMENT, `product_name` varchar(100) NOT NULL, `brand` varchar(50) NOT NULL, `category_id` int(10) unsigned NOT NULL, `general_description` text, `general_features` text, PRIMARY KEY (`product_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; -- -------------------------------------------------------- -- -- Table structure for table `product_versions` -- CREATE TABLE IF NOT EXISTS `product_versions` ( `vers_id` int(10) unsigned NOT NULL AUTO_INCREMENT, `product_id` int(10) unsigned NOT NULL, `barcode` int(11) NOT NULL, `price` float(4,2) NOT NULL, `quontity` int(11) NOT NULL, `description` text NOT NULL, `features` text NOT NULL, PRIMARY KEY (`vers_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; Αν χρειάζεται κάποια διόρθωση μπορείτε να την αναφέρετε. Αν δούμε σαν παράδειγμα τα iphones έχει: Apple iPhone 4 8GB White & Apple iPhone 4 8GB Black όπου έιναι το ίδιο προιόν, δηλ έχουν και τα δύο τα ίδια χαρακτηρηστικά εκτός από το όνομα και το barcode. Αυτά δηλαδή αποθηκέυονται στον πίνακα products & product_versions ή στον products και τους 2 attributes ??? Κάπου εδώ το χάνω λίγο εγώ... Επίσης ένα ακόμα ερώτημα (αν και μπορεί να είναι λίγο χαζό). Όταν τραβάς δεδομένα από τη βάση, ενώνεις τους πίνακες με JOINS. Ok κατανοητό αυτό.. όταν ο διαχειρηστής όμως κάνει εισαγωγή (ή και update) ενός νέου προϊόντος από μία φόρμα θα πρέπει δηλαδή να γίνονται 2-3 συνεχόμενα INSERTS (ή updates αντίστοιχα) στη β.δ. ???
nucleus Δημοσ. 7 Ιουνίου 2013 Δημοσ. 7 Ιουνίου 2013 Όχι δεν θα χρειαστούν πολλαπλά updates μιας και έχεις σε ξεχωριστούς πίνακες τα products και τα product versions και αυτοί οι 2 συνδέονται με το product_id το οποίο δεν αλλάζει όταν κάνεις update ένα product.Οπότε έχεις 2 update Buttons στην διαχείριση ένα για το products και ένα για το products_versions. Αν ωστόσο διαγραφεί ένα προιόν από τον πίνακα products τότε πρέπει να ελέγξεις αν έχει product_versions και να αποφασίσεις αν πρέπει ή όχι να διαγραφούν και αυτά.
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα