2016-04-26 8 views
0

Ich habe einen Multizonen-Musik-Player (mit C# und SQL) gemacht, der in der Firma, in der ich arbeite, Musik in den Sereval-Zonen spielt. Verschiedene vordefinierte Wiedergabelisten werden automatisch zu geplanten Zeiten geladen.Music daypart Datenbankdesign

Ich bin jetzt dabei, die Playlists ein wenig schlauer zu machen. Ich möchte in der Lage sein, ein Lied mit einem oder mehreren Tagesteilen (z. B. Morgen, Mittag, Nacht) zu verbinden.

Was ich erreichen möchte, ist es, Playlisten "on the fly" zu bestimmten Zeiten jeden Tag zu generieren, anstatt die vordefinierten Playlists zu verwenden. So wird das Hinzufügen von Songs zu meiner Musikbibliothek, die die "erlaubten" Dayparts einstellen, ausreichend ... kein stundenlanges Hinsetzen mehr ...

Ich habe momentan einen Musiktisch, eine Playlist-Tabelle und eine Tabelle, die diese beiden Tabellen verbindet, um die tatsächlichen Wiedergabelisten zu speichern.

Ich habe die Tendenz, Dinge übermäßig kompliziert zu machen, also dachte ich, ich würde euch um ein paar Tipps bitten, wie man die Datenbank auf effiziente Weise gestaltet ... (und vielleicht ein paar Zeilen C# -Code dazu) Erstellen Sie die Wiedergabelisten)

+0

sagen Sie Sie einen bestimmten Song mit einem „Tagesabschnitt“ markieren möchten. Kann ein Lied mehrere Teile haben? Warum nicht eingebaute MP3-Tagging verwenden, um dies auf der eigentlichen Datei zu speichern? –

+0

Ja und ja, ein Lied kann mehrere Teile haben. Ich möchte alle diese Daten in der Datenbank behalten, falls ich Musikdateien ersetzen/wiederherstellen muss ... – Liknes

+0

Sie könnten ein Byte speichern, wobei jedes Bit für einen zulässigen Tagesteil steht. Ot eine Zeichenfolge mit x Buchstaben, jeweils für einen Tag. Ein anderer Tagestisch klingt für mich nach Overkill; manchmal ist eine De-Normalisierung der Weg zu gehen .. - Ich würde es nicht 'Daypart' nennen, aber vielleicht 'Gelegenheit', um 'festlich', 'feierlich', 'saisonal' usw. zuzulassen. – TaW

Antwort

0

Wirklich interessantes Problem zu bewältigen. Wenn Sie die Playlist spontan erstellen möchten, ist die Playlist-Tabelle meiner Meinung nach veraltet.

Was ich tun würde ist 3 weitere Spalten zum Musiktisch hinzufügen: Tag, Nachmittag und Nacht. Diese Spalten speichern die Chancen, dass das Lied tagsüber, nachmittags oder nachts gespielt werden kann.

Beispiel:

Day | Afternoon| Night 
10 | 40  | 50 

Dann können Sie eine einfache Abfrage tun, um die Liste on the fly zu generieren.

Beispiel:

Morning playlist 
Select * from SongTable order by Day * random() limit PLAYLIST_SIZE 

* ich in meinem Büro bin so nicht Chance hat, die Abfrage zu testen. Hinweis: Zufallszahl könnte erzeugt werden durch:

ABS(CHECKSUM(NewId())) % 100

+0

Dies ist definitiv ein Weg, es zu tun! Ich denke jedoch, dass ich möchte, dass die dayparts dynamisch sind ... Ich möchte vielleicht zu einem späteren Zeitpunkt weitere dayparts hinzufügen (ich weiß, dass dayparts vielleicht das falsche Wort sind) – Liknes

+0

Eine einfache Möglichkeit, es in ein JSON-Feld zu sehen. {"Tag": 30, "Mittag": 30, "Nacht": 40} Auf diese Weise können Sie die Tagesabschnitte dynamisch erweitern. Nur dass es keine einfache Möglichkeit gibt, nach Wiedergabelisten abzufragen. Sie müssen die gesamte songTable abfragen und dann mit C# sortieren und begrenzen –