Σχεδιασμός βάσης δεδομένων

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

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

Απάντηση
geotso
Δημοσιεύσεις: 2
Εγγραφή: 26 Απρ 2013 19:41

Σχεδιασμός βάσης δεδομένων

Δημοσίευση από geotso » 26 Απρ 2013 22:05

Θέλω να καταχωρήσω τα τραγούδια που έχω (70k+) σε μια βάση δεδομένων. Συγκεκριμένα θέλω για κάθε τραγούδι να έχω τις εξής πληροφορίες (columns):
Τίτλος τραγουδιού
Συνθέτης
Στιχουργός
Ερμηνευτής
Επανεκτελέσεις

Το πιο απλό είναι βέβαια να κάνω έναν πίνακα με τους καλλιτέχνες (π.χ. art_id, art_firstname, art_lastname) και μετά, στον πίνακα των τραγουδιών να περνάω για κάθε έναν το αντίστοιχο id. Τί γίνεται όμως όταν σε ένα τραγούδι είναι περισσότεροι του ενός συνθέτες, στιχουργοί ή ερμηνευτές; Πρέπει να φτιάξω για κάθε μία κατηγορία καλλιτέχνη πλήθος στηλών; Π.χ. οι περισσότεροι ερμηνευτές που έχω βρεί σε ένα τραγούδι είναι 6. Πρέπει να φτιάξω 6 στήλες, ερμηνευτής1, ερμηνευτής2,... ερμηνευτής6 για να καταχωρήσω το id του καθενός;
Υπ' όψιν, το κάθε όνομα καλλιτέχνη που θα αντιπροσωπεύουν τα id, αργότερα θα το κάνω link που θα οδηγεί στην σελίδα με την δισκογραφία του.

Όσο για τις Επανεκτελέσεις, δεν θέλω να τις γράφω μία-μία εγώ. Θέλω με κάποιο τρόπο να ψάχνει στη βάση δεδομένων και να μου επιστρέφει το όνομα του τραγουδιστή, το άλμπουμ όπου υπάρχει το συγκεκριμένο τραγούδι και την χρονολογία κυκλοφορίας του.
Το πρόβλημα είναι ότι με τον ίδιο τίτλο μπορεί να υπάρχουν δεκάδες τραγούδια με διαφορετικούς στίχους. Είμαι σίγουρος (αν και όχι γνώστης) ότι με καποιο query θα μπορέσω να πάρω μια λίστα των ομότιτλων τραγουδιών. Πώς όμως θα την περιορίσω μόνο στα ακριβώς ίδια;

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

Ευχαριστώ

Άβαταρ μέλους
giannis17
Honorary Member
Δημοσιεύσεις: 1215
Εγγραφή: 06 Ιαν 2005 19:50
Τοποθεσία: Παγκράτι - Αθήνα
Επικοινωνία:

Σχεδιασμός βάσης δεδομένων

Δημοσίευση από giannis17 » 27 Απρ 2013 01:21

Δεν νομίζω ότι χρειάζεσαι ξεχωριστά πεδία για κάθε συνθέτη/ερμηνευτή/στιχουργό. Όταν είναι περισσότεροι από έναν απλά γράφε τους μαζί διαχωρισμένους με κόμμα και μετά στο πρόγραμμα σου κόβε τα string με βάση τα κόμματα και δούλευέ τα σαν μεμονωμένα string (για αναζητήσεις). Σίγουρα θα αργεί λίγο συγκριτικά με το να έχεις ξεχωριστά πεδία αλλά είναι η πιο εύκολη υλοποίηση. Αν θες να το κάνεις και λίγο πιο σωστά μπορείς να έχεις ένα ξεχωριστό πίνακα "Καλλιτέχνες" με πεδία "όνομα" και "κωδικό" και να παίζεις με κωδικούς αντί για strings οπότε κάνεις πολύ πιο γρήγορες τις αναζητήσεις αλλά μετά γίνεται πιο πολύπλοκη η εισαγωγή των καλλιτεχνών στα στοιχεία του τραγουδιού, όχι τραγικά βέβαια.

Τέλος αν έχεις τα τραγούδια αυτά αποθηκευμένα με πληροφορίες mp3 TAG θα σε βοηθήσει πολύ το www.mediamonkey.com από όπου μπορείς να τα φτιάξεις σε playlist και μετά να τις κάνεις export σε csv, κάνεις ότι διορθώσεις θες μέσω excel και μετά τα περνάς κατευθείαν στη βάση σου.
"There is only one problem with common sense; it’s not very common."
– Milt Bryce

Apostolis_38
Δημοσιεύσεις: 1969
Εγγραφή: 14 Φεβ 2008 16:20
Τοποθεσία: ΠΕΙΡΑΙΑΣ

Σχεδιασμός βάσης δεδομένων

Δημοσίευση από Apostolis_38 » 27 Απρ 2013 10:03

Η μία λύση είναι αυτή που γράφει ο giannis17 με εγγραφές διαχωρισμένες με κόμματα, αλλά κατά την άποψή μου δεν είναι η ενδεδειγμένη.
Καλύτερα να χρησιμοποιείς επιπλέον πίνακες όπου χρειάζεται.

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

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

Σχεδιασμός βάσης δεδομένων

Δημοσίευση από korgr » 27 Απρ 2013 10:29

Ψάξου για many to many releationships
http://www.phpknowhow.com/mysql/many-to ... tionships/

alou
Script Master
Δημοσιεύσεις: 1374
Εγγραφή: 24 Αύγ 2007 19:52
Επικοινωνία:

Σχεδιασμός βάσης δεδομένων

Δημοσίευση από alou » 27 Απρ 2013 11:39

Αυτό που λέει ο Kor.

Ένας πίνακας με artists με ότι στοιχεία θες, ένας πίνακας με composers με αντίστοιχα στοιχεία, ένας πίνακας με τραγούδια με τα υπόλοιπα στοιχεία τους και πίνακες σχέσεων, song_to_composer, sont_to_artis, song_to_song για επανεκτελέσεις κλπ όπου εκεί έχεις μόνο τα ids των 2, με δυνατότητα σε ένα τραγούδι να έχεις όσους θες, πχ

song_to_composer:
song_id - composer_id
1 - 8
1 - 12
2 - 4
2 - 9
3 - 5
4 - 7

και κάνεις ανάλογα join στα queries σου. Είναι ο τρόπος που θα σου δημιουργήσει λιγότερους πονοκεφάλους και έχει περισσότερες δυνατότητες.

geotso
Δημοσιεύσεις: 2
Εγγραφή: 26 Απρ 2013 19:41

Σχεδιασμός βάσης δεδομένων

Δημοσίευση από geotso » 27 Απρ 2013 12:42

Κάτι μου λέει ότι η λύση είναι many to many relationships, κι αρχίζω αμέσως να ψάχνομαι, όπως λέει ο korgr.

Όπου βρω δυσκολία βέβαια, μου επιτρέπετε να επανέλθω :)

Ευχαριστώ πολύ

Απάντηση

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

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

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