Marc Reichelt: Sinnvollste Lösung für Datenbankproblem?

Beitrag lesen

Hallo an alle,

ich arbeite derzeit an einer einfachen Webseite, wo alle möglichen Künstler URLs zu ihren offen lizenzierten Musikdateien eintragen können.

Jetzt habe ich die Datenbankstruktur schon das zweite Mal verworfen, und nun wieder ein neues Konzept - mein Problem dabei werde ich gleich schildern.
Da sich die Daten für die Künstler meist für alle Lieder gemeinsam ändern, habe ich zwei Tabellen entworfen - eine für die Künstler ('artists'), und eine für die Lieder ('songs').
Folgend der Tabellenentwurf für 'artists' (mir ist klar, dass die erwähnten Künstler ihre Musik bestimmt nicht unter offene Lizenzen stellen, sie dienen hier nur als Beispiel):

id | name            | url
-----------------------------------------------
1  | Die Toten Hosen | http://dth.de/
2  | Die Ärzte       | http://bademeister.com/
3  | Rammstein       | http://rammstein.de/

Folgend nun die Tabelle 'songs' (wegen der Darstellung bei kleinen Auflösungen etwas umgebrochen):

id | artist_id | license     | hits | name       | url                             | =>
------------------------------------------------------------------------------------ =>
1  | 1         | cc-by       | 234  | Was Zählt  | http://dth.de/waszaehlt.mp3     | =>
2  | 1         | cc-by-nc-nd | 123  | Bayern     | http://dth.de/bayern.mp3        | =>
3  | 1         | cc-by-nc-nd | 2    | Mehr Davon | http://dth.de/mehrdavon.mp3     | =>
4  | 2         | cc-by-nc    | 67   | Der Graf   | http://bademeister.com/graf.ogg | =>
5  | 3         | cc-by-nc-sa | 2035 | Seemann    | http://rammstein.de/seemann.mp3 | =>

filetype | admin_id | hash_md5 | filesize | length
---------------------------------------------------
mp3      | 2        | ...      | 3245100  | 205
mp3      | 2        | ...      | 4021030  | 215
mp3      | 1        | ...      | 3910341  | 195
ogg      | 3        | ...      | 4632157  | 243
mp3      | 5        | ...      | 2903470  | 315

Dabei ist 'artist_id' die entsprechende ID des Künstlers (artists.id), 'license' ist eine Abkürzung für die entsprechende Lizenz. 'hits' enthält die Anzahl der Zugriffe auf das einzelne Stück, 'name' und 'url' sollten denke ich klar sein. 'filetype' gibt den verwendeten Typ an, also derzeit entweder mp3 oder ogg (die URL muss ja nicht zwangsläufig auf dem Dateityp enden ;-).
'admin_id' ist die entsprechende ID des Admins, der diesen Musiktitel in die Datenbank eingetragen hat. Diese werden in einer Tabelle 'admins' gespeichert. 'has_md5' speichert die MD5-Prüfsumme, die eventuell später von einem eigens programmierten Robot in einem bestimmten Intervall (z.B. eine Woche) aktualisiert und überprüft wird - bei einer Änderung werden die Admins benachrichtigt. 'filesize' ist die Dateigröße in Bytes und 'length' die Länge des Stücks in Sekunden, das sind Infomationen die später eventuell auch vom Robot ermittelt werden und schließlich dem Endbenutzer nützlich sein können.

Uff.
Jetzt zu meinem eigentlichen Problem.

Da ein Künstler nur Vorschläge machen kann (Datenbank 'temp_songs'), die dann von einem Admin in die Datenbank eingetragen werden können, kann er selbst keine Einträge anlegen. Sobald ein Künstler in die Datenbank 'artists' eingetragen ist, ist das kein Problem mehr.

Dabei ist das Ganze auch eine Gewissensfrage, denn ich könnte die Tabelle 'artists' auch verwerfen und die Informationen direkt in die Tabelle 'songs' eintragen. Da würde sich das Problem von selbst beheben, da der Künstler nun stets einfach den Künstlernamen und die Homepage-URL mit angibt. Etwas mehr Speicherplatzverbrauch, aber wesentlich weniger Probleme und Komplexität.
Wenn ich ehrlich bin, glaube ich dass selbst eine Datenbankgröße von 10 MB nicht so schnell überschritten wird - und ich habe reichlich(tm) Speicherplatz.

Kann mir jemand bei meiner Entscheidung helfen? :-)

Grüße

Marc Reichelt || http://www.marcreichelt.de/

--
Linux is like a wigwam - no windows, no gates and an Apache inside!
Selfcode: ie:{ fl:| br:> va:} ls:< fo:} rl:( n4:( ss:) de:> js:| ch:? sh:| mo:) zu:)
http://emmanuel.dammerer.at/selfcode.html