Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Erkundung der Datenmodellierung (wie man eine vernünftige Datenbank zusammenfügt)

Überrascht scheinen die meisten Antworten die Frage übersehen zu haben, aber ich werde es versuchen;

Dies wird als Datenmodellierung bezeichnet (wie Sie eine Reihe von Tabellen in einer Datenbank zusammenfügen, um das, was Sie wollen, bestmöglich auszudrücken), und fühlen Sie sich nicht albern, wenn Sie fragen; Es gibt Menschen da draußen, die all ihre wachen Stunden damit verbringen, Datenmodelle zu optimieren und zu entwerfen. Sie sind enorm wichtig für das Wohlergehen jedes Systems, und sie sind in Wahrheit viel wichtiger, als die meisten Menschen ihnen zutrauen.

Es hört sich so an, als wären Sie auf dem richtigen Weg. Es ist immer ein guter Tipp, Ihre Entitäten zu definieren und für jede eine Tabelle zu erstellen. In diesem Fall haben Sie also Benutzer und Wiedergabelisten und Songs (zum Beispiel). Definieren Sie Ihre Tabellen so; BENUTZER, SONG, PLAYLIST.

Als nächstes definieren Sie die Namen von Feldern und Tabellen (und vielleicht sind die oben vorgeschlagenen vereinfachten Namen, nun ja, einfach). Einige führen falsche Namespaces ein (z. B. MYAPP_USER statt nur USER), insbesondere wenn sie wissen, dass das Datenmodell in Zukunft in derselben Datenbank erweitert und erweitert wird (oder einige, weil sie wissen, dass dies unvermeidlich ist), während andere es einfach durchziehen was sie brauchen.

Die große Frage wird immer nach der Normalisierung sein und verschiedene Probleme damit, Leistung gegen Anwendbarkeit abzuwägen, und es gibt Unmengen von Büchern, die zu diesem Thema geschrieben wurden, also kann ich Ihnen keine aussagekräftige Antwort geben, aber das Wesentliche für mich ist:

Ab wann ist ein Datenfeld in einer Tabelle einer eigenen Tabelle würdig? Ein Beispiel ist, dass Sie Ihre Anwendung durchaus mit nur einer oder zwei oder sechs Tabellen erstellen könnten, je nachdem, wie Sie Ihre Daten aufteilen möchten. Ich denke, hier kommt Ihre Frage wirklich ins Spiel.

Ich würde sagen, dass Sie mit Ihren Annahmen ziemlich richtig liegen, was Sie beachten sollten, sind konsistente Namenskonventionen (und es gibt jede Menge Meinungen darüber, wie man Bezeichner nennt). Für Ihre Anwendung (mit den oben genannten Tabellen) würde ich;

tun
USER { id, username, password, name, coffee_preference } 
SONG { id, artist, album, title, genre } 
PLAYLIST { id, userid } 
PLAYLIST_ITEM { id, songid, playlistid, songorder }

Jetzt können Sie SQL verwenden, um alle Wiedergabelisten für einen Benutzer zu erhalten;

   SELECT * FROM PLAYLIST WHERE userid=$userid

Oder holen Sie sich alle Songs in einer Playlist;

   SELECT * FROM SONG,PLAYLIST_ITEM WHERE playlist_item.playlistid=$playlist.id AND song.id=playlist_item.songid ORDER BY playlist_item.songorder

Usw. Auch zu diesem Thema sind Wälzer geschrieben worden. Es geht darum, klar und semantisch zu denken und gleichzeitig eine technische Lösung dafür aufzuschreiben. Und manche Leute haben nur das als Karriere (wie DBAs). Es wird viele Meinungen geben, besonders zu dem, was ich hier geschrieben habe. Viel Glück.