dewn735 Δημοσ. 15 Δεκεμβρίου 2012 Δημοσ. 15 Δεκεμβρίου 2012 Μια ερώτηση για τους προχωρημένους του είδους: Έχουμε ένα σενάριο όπου θέλουμε να εμφανίσουμε ένα μηχάνημα με όλα του τα ανταλλακτικά. Κάθε μηχάνημα μπορεί να έχει πολλά ανταλλακτικά (30-40), αλλά και κάθε ανταλλακτικό μπορεί να χρησιμοποιηθεί σε πολλά μηχανήματα (5-10). Έστω επίσης machines ο πίνακας που έχει τα μηχανήματα και parts ο πίνακας με τα ανταλλακτικά. Ποιο από τα παρακάτω θα ήταν το σωστότερο να επιλέξω (από άποψη ευκολίας, ταχύτητας και επιβάρυνσης της βάσης); 1) Στον πίνακα parts φορτώνω όλα τα ανταλλακτικά - κάθε ένα από αυτά εμφανίζεται μία μόνο φορά. Στον πίνακα machines φτιάχνω ένα πεδίο spareparts - σε αυτό, αποθηκεύω όλα τα ανταλλακτικά ενός μηχανήματος σε char σαν κωδ1,κωδ2,κωδ3,κτλ. Για να τα επιλέξω, φτιάχνω ένα query με ατελείωτα OR: >SELECT * FROM parts WHERE id='Κωδ1' OR id='Κωδ2' OR id='Κωδ3' ... 2) Στον πίνακα parts φορτώνω όλα τα ανταλλακτικά για ΚΑΘΕ μηχάνημα (κάθε ανταλλακτικό πλέον εμφανίζεται τόσες φορές, όσες και τα μηχανήματα που το χρησιμοποιούν) >SELECT * FROM parts WHERE macid=1 3) Ξεχωρίζω τελείως ανταλλακτικά από μηχανήματα και φτιάχνω τρίτο πίνακα συσχετισμού πχ connections, όπου αποθηκεύω όλες τις σχέσεις μεταξύ μηχανημάτων και ανταλλακτικών και ξεκινάω join: >SELECT * FROM connections LEFT JOIN parts on parts.id=connections.partid WHERE connections.macid=1
defacer Δημοσ. 15 Δεκεμβρίου 2012 Δημοσ. 15 Δεκεμβρίου 2012 Από τη στιγμή που ο συνολικός όγκος των δεδομένων σου είναι "αστείος", σίγουρα το #3 που είναι και το "θεωρητικά σωστό" (δηλαδή normalized). Αν μιλούσαμε για τεράστιους όγκους, σε σημείο που να μη μπορεί να εξυπηρετήσει όλη την κίνηση ένας μόνο server, τότε θα είχε νόημα κάτι από τα 2 πρώτα για να διευκολυνθείς στην πραγματοποίηση sharding -- όμως επίσης θα είχε νόημα και να σκεφτείς πολύ προσεκτικά αν η MySql ή οποιαδήποτε relational database γενικότερα είναι η σωστή λύση για τις ανάγκες σου.
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα