Also man könnte die Lage so beschreiben: (?)
Da ist eine Songlist, eine Tabelle, mit Song (id, name, Prosainfo...).
Dann eine Playlist, die in Deinem Fall im Namen codiert ist, ein Sternchen für was auch immer, eine id (1, 2, ...) und eine Variantennummer (A, B, C, ...) , wenn ich es richtig verstanden habe, Versionsnummer würde ich es nicht nennen, da bei Software eine neue Version die alte verdrängt. Deine Beschreibung habe ich so verstanden, dass die Playlists A, B, ... nebeneinander existieren können und sollen, so dass jmd. eine gewisse Zeit Stücke aus 1A hört, dann, zur Abwechslung, 1B, evtl. 1C aber dann vielleicht auch wieder 1A.
Relational gedacht brauchen wir eine id die keine Bedeutung trägt, dann eine Indikation (T, N, ...), dann die Songid.
Dann User mit userid, evtl. name, evtl. Indikation, wenn es pro User nur eine Indikation gibt. Gibt es mehrere, müsste man dafür eine weitere Kreuztabelle haben, so dass User 1 evtl. Indikation T, N, X hat, u2 N, Y, u3 T, Y.
Hm. Es gibt nicht pro User eine eigene Playlist, richtig? Ein Song kann ja auch (theoretisch) für mehrere Indikationen geeignet sein. Kommt aber vielleicht in der Praxis nicht vor.
Hast Du überhaupt schon von der Normalform relationaler DB gehört?
Bei vielen Usern, vielen Playlists, Varianten und vielen Songs droht Dir rasch ein Komplexitätsproblem. Könntest Du auch damit arbeiten, dass die Playlists dynamisch für jeden User getrennt erzeugt werden?
Ein Lösungsansatz wäre dann nämlich, dass man noch eine Tabelle pflegt, in der pro User und Indikation die maximale Songid gespeichert wird, die dieser bisher gehört hat, und seine nächste Playlist wird nur Songs mit höherer ID enthalten, außer er kommt ans Limit, wo es wieder mit 1 losgeht.
Womöglich willst Du aber 1x im Monat die Playlistzuordnung kontrollieren/aktualisieren. Indikation (t, n, x, ... (Kleinbuchstaben zur Unterscheidung von Varianten)) ist die Hauptkategorie der Playlist, Variante (A, B, ...) die Unterkategorie, und die User wissen vielleicht selbst, dass sie nach soundsoviel Tagen/Wochen/Monaten zur nächsten Variante springen sollen.
Das Problem ist, dass User 1 das für Indikation a Song I (röm. 1) und für Indikation b Song I hören soll, aber 2x der gleiche soll vermieden werden. Auch soll vermieden werden, dass er 3 Wochen nach Ind. a Song I in Variation A hört, dann in Variation B nicht mehr, aber jetzt der gl. Song für Indikation b in Variante B auftaucht.
Das könnte man versuchen zu vermeiden, in dem man bestimmt, was die Maximalzeit ist, bis ein Song wiederholt werden kann und was die Minimalzeit ist, die man auf einer Variante verharrt.
Angenommen die Mindestzeit ist 4 Wochen, die man die gl. Playlist hört, und dann sollen 16 (4*4) Wochen Pause sein, bis der Song wiederholt werden kann. Dann müsste man dafür sorgen, dass der Song bei jeder Indikation nur in den Varianten A, (nicht B, C, D), E, (nicht F, G, ...), ... auftaucht und die Indikationen pro User immer Variantensynchron sind, d.h. ein Song kann bei tA und tE auftauchen und bei nA und nE, aber nicht bei tA und nB. Dann hätte man aber immer noch das Problem, dass der Song auf tA und nA zugleich ist. Der Song dürfte also bei Indikation a nur in Liste A auftauchen, nicht in E usw., in Indikation b dagegen nicht in A, sondern in E und nur in E, in Indikation c dann in Variante I (groß i).
Dazu müssen aber die Zeitintervalle alle gleich groß sein oder man müsste den größen gemeinsamen Teiler bestimmen und mit einer Rotation durch entsprechend mehr Varianten arbeiten. Mithilfe eines Modulooperators könnte man aus der Songid ableiten, in welche Variante er gehört.
Bleiben wir mal bei 4 Varianten und 16 Wochen Pause. Songid wäre 123. 123 Modulo 4 ist 3, d.h. er käme in den 3. Slot, das ist Variante C. C wäre dann für Indikation a, für Indikation b wäre es C+4=G, für Indikation c wäre es C+8 usw. Dann würde jeder auch bei mehreren Indikationen und daher Playlists immer die Mindestpausen einhalten. Nachteil: Jemand mit nur einer Indikation würde weit länger auf die Wiederholung warten müssen, als für ihn individuell eigentlich nötig und Du musst sehr viele Songs vorhalten, damit auch nach 13 Wochen noch eine Playlist gefunden wird.
Wenn man jetzt aber dazunimmt, dass es pro Indikation unterschiedliche Pausenlängen gibt, oder je User, oder beides, dann explodieren die Möglichkeiten.
Wie viele Indikationen gibt es denn?
Wie viele Songs gibt es?
Wie viele User?
Wie viele Playlists?
Bei wenigen Usern lohnt sich der Aufwand ja gar nicht.
Übrigens kommt mir das ganze ziemlich esoterisch vor.