Σχεδίαση Βάσης Δεδομένων

Συζητήσεις για την βάση δεδομένων MySQL και το phpMyAdmin

Συντονιστές: WebDev Moderators, Super-Moderators

Απάντηση
jmaz
Δημοσιεύσεις: 20
Εγγραφή: 18 Ιουν 2011 15:51

Σχεδίαση Βάσης Δεδομένων

Δημοσίευση από jmaz » 11 Ιούλ 2012 02:06

Θέλω να δημιουργήσω μια web εφαρμογή, σε php, η οποία θα εμφανίζει κάποια προϊόντα ανα κατηγορίες.

Θα υπάρχει μια βάση δεδομένων, η οποία θα έχει πολλά προϊόντα και πολλές κατηγορίες/υποκατηγορίες.

π.χ. έχω 30 κατηγορίες και οι 10 απο αυτές έχουν x υποκατηγορίες :

1η κατηγορία
α1 υποκατηγορία -> 100 προϊόντα
β1 υποκατηγορία -> 30 προϊόντα
γ1 υποκατηγορία -> 20 προϊόντα
2η κατηγορία -> 120 προϊόντα
3η κατηγορία
α3 υποκατηγορία
β3 υποκατηγορία
γ3 υποκατηγορία
...
30η κατηγορία

-------------------------
Ποίος είναι ο πιο καλός/σωστός τρόπος για να χωρίσω την db?

1ος Τρόπος

Table 'προϊόντα'
ProdID, ονομα, κατασκευαστης, περιγραφη, τιμη, κατηγορια, υποκατηγορια

ή

2ος Τρόπος

Table 'κατηγοριες'
CatID, CatName

Table 'κατηγορία1'
CatID, ProdID, ονομα, κατασκευαστης, περιγραφη, τιμη, υποκατηγορια

Table 'κατηγορία2'
CatID, ProdID, ονομα, κατασκευαστης, περιγραφη, τιμη, υποκατηγορια

ή καποιος άλλος τρόπος?

Άβαταρ μέλους
fafos
Script Master
Δημοσιεύσεις: 6231
Εγγραφή: 30 Νοέμ 2004 03:09

Σχεδίαση Βάσης Δεδομένων

Δημοσίευση από fafos » 11 Ιούλ 2012 04:00

Table 'προϊόντα'
ProdID, ονομα, κατασκευαστης, περιγραφη, τιμη, CatID

Table 'κατηγοριες'
CatID, CatName, CatParent
Οι πάνες και οι πολιτικοί πρέπει να αλλάζονται συχνά για τον ίδιο λόγο...

Άβαταρ μέλους
dva_dev
Script Master
Δημοσιεύσεις: 3790
Εγγραφή: 16 Σεπ 2005 01:32
Επικοινωνία:

Σχεδίαση Βάσης Δεδομένων

Δημοσίευση από dva_dev » 11 Ιούλ 2012 07:59

Αν το προχωρήσεις ένα βήμα ακόμα...
Κατηγορίες
CatID, CatName, CatParent

Προϊόντα
ProdID, ονομα, κατασκευαστης, περιγραφη, τιμη

ΠροϊόνταΚατηγορίας
CatID, ProdID

Το θέμα είναι να καθορίσεις την χρυσή τομή ανάμεσα στην ευελιξία, την ταχύτητα και την ευκολία.

Άβαταρ μέλους
korgr
Honorary Member
Δημοσιεύσεις: 5067
Εγγραφή: 07 Οκτ 2008 18:30
Τοποθεσία: Corinth
Επικοινωνία:

Σχεδίαση Βάσης Δεδομένων

Δημοσίευση από korgr » 11 Ιούλ 2012 08:43

Η προσέγγιση του dva_dev σου προσφέρει και την δυνατότητα να μπορεί αν χρειαστεί, ένα προϊόν να καταχωρείται σε περισσότερες κατηγορίες ταυτόχρονα.
Προσωπικά αυτή την φιλοσοφία ακολουθώ...

jmaz
Δημοσιεύσεις: 20
Εγγραφή: 18 Ιουν 2011 15:51

Σχεδίαση Βάσης Δεδομένων

Δημοσίευση από jmaz » 11 Ιούλ 2012 17:27

Καταρχήν σας ευχαριστώ για τις απαντήσεις σας!

Αυτό που θέλω να κάνω είναι να φτιάξω μια βάση δεδομένων, να χωρίσω σε κατηγορίες τα προϊόντα π.χ. βιβλία, αναλωσιμα, καλώδια και υποκατηγορίες βιβλία->μαγειρικής, cd->μουσικής, καλώδια->υπολογιστών και να μπορώ να εμφανίσω, όλη την κατηγορία ή μόνο μια υποκατηγορία ή να έχω συγκεκριμένα αποτελέσματα (αναζήτηση).

σε αυτά μπορεί να υπάρχει και 2η υποκατηγορία π.χ. καλώδια->υπολογιστών->sata

μπορώ να το φτιάξω σε εναν πίνακα και με ένα απλο query να έχω τα αποτελέσματα.

αλλα σίγουρα δεν θα είναι πολύ γρήγορο και όταν μιλάμε για 5000προϊόντα τότε το πράγμα ξεφεύγει.

κατάλαβα το παράδειγμα του fafos αλλα δεν ξέρω με ποιον τρόπο θα πάρω πίσω τα σωστά αποτελέσματα.

π.χ. αν κάνω select * from products where CatID=5 θα μου βγάλει την υποκατηγορία 5

πώς μπορώ να επιλέξω όλη την κατηγορία?

καταλαβαίνω οτι πρέπει να γίνει το εξής : select CatID from categories where CatParent=1

να βρώ όλα τα CatID που συνδέονται με το CatParent και να κάνω select * from products where CatID=x

ομως πως γίνεται αυτο σε ενα query (αν γίνεται και αν υπάρχει λόγος να γίνει)?

επίσης φίλε dva_dev το δικό σου παράδειγμα πως λειτουργεί? καταλαβαίνω οτι είναι καλύτερο αλλα με μπερδεύει.

Άβαταρ μέλους
dva_dev
Script Master
Δημοσιεύσεις: 3790
Εγγραφή: 16 Σεπ 2005 01:32
Επικοινωνία:

Σχεδίαση Βάσης Δεδομένων

Δημοσίευση από dva_dev » 12 Ιούλ 2012 00:24

Το δικό μου παράδειγμα είναι απλώς μια "επέκταση" αυτού που έχει κάνει και ο fafos.
Αν καταλάβεις το δικό του ακριβώς το ίδιο είναι και το δικό μου.

Πέρα από αυτό νομίζω ότι το πρώτο πράγμα που πρέπει να κάνεις είναι να καθορίσεις τις απαιτήσεις σου. Δεν υπάρχει λόγος να πας σε Ν-Μ σχέσεις αν αυτό που χρειάζεσαι είναι 1-Ν.
Κατόπιν θα πρότεινα να ρίξεις "λίγο"* διάβασμα στα προηγούμενα θέματα τόσο στην περιοχή της php όσο και στις άλλες των βάσεων δεδομένων. Υπάρχουν αρκετές λύσεις στο πρόβλημα σου που έχουν παρατεθεί/αναλυθεί, αλλά και σε προβλήματα που δεν έχεις (ή δεν ξέρεις ότι έχεις) ακόμα.

Επίσης μια ματιά σε αυτά θα σου δώσουν μερικές καλές υλοποιήσεις ή εναλλακτικές

http://www.google.gr/search?q=mysql+adjacency
http://www.google.gr/search?q=adjacency+vs+nested+set
http://dba.stackexchange.com/questions/ ... -ctes/7161


* το "λίγο" σε εισαγωγικά, γιατί το διάβασμα δεν είναι ποτέ αρκετό.

jmaz
Δημοσιεύσεις: 20
Εγγραφή: 18 Ιουν 2011 15:51

Σχεδίαση Βάσης Δεδομένων

Δημοσίευση από jmaz » 12 Ιούλ 2012 00:41

οκ φιλαρακι! σιγουρα το διαβασμα δεν τελειωνει ποτε! σε ευχαριστω πολυ!

Serghio
Δημοσιεύσεις: 451
Εγγραφή: 08 Φεβ 2011 19:20
Τοποθεσία: Περιστέρι

Σχεδίαση Βάσης Δεδομένων

Δημοσίευση από Serghio » 06 Σεπ 2012 20:46

Eρώτηση:

Το ID, στα ProdID ή CatID υποδηλώνει primary key/column?

Άβαταρ μέλους
dva_dev
Script Master
Δημοσιεύσεις: 3790
Εγγραφή: 16 Σεπ 2005 01:32
Επικοινωνία:

Σχεδίαση Βάσης Δεδομένων

Δημοσίευση από dva_dev » 06 Σεπ 2012 23:44

Συνήθως δηλώνει ή primary key ή foreign key.
Αν έχεις δηλαδή έναν πίνακα
Product με πεδία ID, name, ...
Και έναν πίνακα ProductDetails με πεδία ID,ProductID, SupplierID, ...

"Προφανώς" το ID υποδηλώνει πως είναι το primary key του πίνακα ενώ τα ProductID, SupplierID πως είναι foreign keys σε αντίστοιχους πίνακες Product, Supplier, κ.λπ. και πιθανώς υπάρχουν και τα αντίστοιχα relations στους πίνακες πάνω σε αυτά τα πεδία.
Χωρίς όμως αυτό να σημαίνει ότι είναι υποχρεωτικό ή 100% σίγουρο. Θα πρέπει να τσεκάρεις τη σχεδίαση του πίνακα αν θέλεις να βεβαιωθείς, γιατί μπορεί ο designer της βάσης να έχει περίεργα βίτσια και τα ονόματα των primary keys να τα παίρνει από το random.org

Η ονοματοδοσία μπορεί να κάνει τη ζωή σου (ή τη ζωή των άλλων) ευκολότερη ή δυσκολότερη.

Serghio
Δημοσιεύσεις: 451
Εγγραφή: 08 Φεβ 2011 19:20
Τοποθεσία: Περιστέρι

Σχεδίαση Βάσης Δεδομένων

Δημοσίευση από Serghio » 10 Σεπ 2012 08:24

Eρώτηση:
Οπότε, εξυπακούεται ότι αν θέλω οι πίνακες να "σχετίζονται" θα πρέπει να κάνω χρήση foreign keys.
Που σημαίνει innoDB ο τύπος της βάσης,σωστά;

Άλλη ερώτηση-σημαντική;

Υπάρχει τρόπος, το χαρακτηριστικό foreign key μιας βάσης innoDB, να προσομοιωθεί με κάποιο τρόπο σε μια βάση τύπου MyISAM?

Απάντηση

Επιστροφή στο “MySQL”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 0 επισκέπτες