Γιατί "έτσι πρέπει"? Αυτό θα σου δώσει την απάντηση και στο πως θα πρέπει να γράψεις τον κώδικα σου. Προφανώς, αναζήτηση σε binary περιεχόμενο δεν μπορείς να κάνεις. Έχεις ανάγκη για συχνές αλλαγές και transaction support στο mp3? Είναι τόσο μικρά τα αρχεία ώστε να μην επηρεάζουν τη λειτουργία της βάσης? Θα υπάρχουν πολλές αναζητήσεις ή λίγες? Αν τα αρχεία είναι πολύ μεγάλα μπορούν να προκαλέσουν fragmentation στη βάση. Επίσης, αν διαβάζεις ένα μεγάλο binary στα πλαίσια ενός transaction, αυξάνεται η διάρκεια του transaction και η πιθανότητα blocking. Όσο κάποιος διαβάζει το binary, κάποιος άλλος ο οποίος θέλει να πειράξει τις άλλες στήλες του πίνακα θα πρέπει να περιμένει.
Οι απαντήσεις στα παραπάνω είναι πολύ σημαντικές για το πως θα σχεδιάσεις τους πίνακες της βάσης σου. Μπορείς π.χ. να έχεις ένα πίνακα με όλες τις στήλες που χρειάζεσαι και μία στήλη varbinary(max) για το mp3. Έτσι θα μπορείς να διαβάσεις όλες τις πληροφορίες με ένα select αλλά θα αυξάνεται έτσι η πιθανότητα blocking. Ή, μπορείς να έχεις δύο πίνακες, ένα με τις στήλες που χρησιμοποιείς γενικά σε αναζητήσεις και ένα πίνακα ο οποίος θα περιέχει μόνο τη στήλη varbinary. Όσες αναζητήσεις θέλεις θα τις κάνεις στον πρώτο πίνακα και από τον δεύτερο θα τραβάς μόνο τα binary δεδομένα όταν τα χρειαστείς. Μπορείς επίσης να έχεις τους δύο πίνακες σε διαφορετικά filegroups για να αποφύγεις το fragmentation. Κοίτα οπωσδήποτε στο documentation του SQL Server για να δεις πως δουλεύει ο τύπος varbinary(max), π.χ. το Managing ntext, text and image data.
Από εκεί και πέρα, το πως θα διαβάσεις ή θα τροποποιήσεις τα mp3 εξαρτάται από το API που χρησιμοποιείς. Γενικά, επειδή δεν είναι εύκολη η ανάγνωση ενός μεγάλου binary με τη μία σχεδόν όλα τα APIs δίνουν τρόπο να διαβάσεις ή να γράψεις τα binary δεδομένα τμηματικά. Αφού λες για NetBeans προφανώς χρησιμοποιείς Java, οπότε θα πρέπει να κοιτάξεις στο JDBC API. Το JDBC έχει το interface java.sql.blob . Αυτό σου επιτρέπει να γράψεις τα δεδομένα είτε ως byte array είτε μέσω ενός stream.
Παναγιώτης Καναβός, Freelancer
Twitter: http://www.twitter.com/pkanavos