Ich habe mir die letzten Tage den Kopf über Plattform-Kompatibilität zerbrochen und dabei ein erstes Datenmodell für Plattformen ersonnen
und ins Wiki gestellt. Nachfolgend will ich Euch das Modell erklären.
1) Allgemeines
Die Plattformen werden über zwei Grundtabellen abgebildet, "Platform" (Ebene 2) und "SubPlatform" (Ebene 3). Die Ebene 1 der Plattform-Art habe ich zunächst mal nur als Attribut an die "Platforms" drangepappt, weil nicht so wichtig. Das können wir noch ändern bei Bedarf.
Die beiden Grundtabellen sind über eine 1-n-Beziehung miteinander verknüpft, weil ich nicht glaube, dass eine Subplattform mehreren Plattformen zugeordnet sein kann. Ebenfalls in einer 1-n-Beziehung stehen die Plattform-Tabelle und die Release Groups, da jeder RG nur genau eine Plattform zugeordnet werden darf.
Wichtig hierbei ist die Unterscheidung zwischen beiden Ebenen. Wann "Platform" und wann "SubPlatform"? Für mich handelt es sich um eine Plattform (Ebene 2), wenn Spiele explizit dafür veröffentlicht werden.
Beispiele:
a) Es erscheinen Spiele explizit für Nintendo DS und 3DS, nicht aber für die Nintendo-DS-Familie. Also sind DS und 3DS zwei Plattformen der Ebene 2.
b) Es erscheinen Spiele explizit für Windows, nicht aber speziell für Windows XP oder Windows Vista. Also ist Windows die Plattform der Ebene 2, XP und Vista gehören dagegen auf als Subplattform auf die Ebene 3.
2) Allgemeines zur Kompatibilität
Wenn wir Kompatibilität betrachten, so spreche ich in Zukunft immer von zwei Plattformen, einer Bezugsplattform und einer anderen Plattform. Die Frage lautet dann immer: Wie geht die Bezugsplattform mit Spielen um, die für die andere Plattform veröffentlicht wurden? Oder anders gefragt: Laufen Spiele, die für die andere Plattform veröffentlicht wurden, auf der Bezugsplattform?
Weiterhin unterscheide ich zwischen aufwärts und abwärts. Ist die Bezugsplattform jünger/neuer als die andere Plattform, dann geht es um Abwärtskompatibilität und umgekehrt.
Beispiele:
Bezugsplattform: Nintendo 3DS
andere Plattform: Nintendo DS
Kompatibilität: Generelle Abwärtskompatibilität
Bezugsplattform: Nintendo DS
andere Plattform: Nintendo 3DS
Kompatibilität: Generelle Aufwärtsinkompatibilität
Darauf aufbauend habe ich mehrere Grundfälle identifiziert und im Datenmodell abgebildet:
3) Generelle Kompatibilität
Um diesen Fall abzubilden, wird eine zusätzliche Tabelle geschaffen, die zwei Plattformen der Ebene 2 miteinander verbindet (Connection 9 im Wiki). Eine Plattform wird als Bezugsplattform verbunden, die andere als "andere Plattform", und es wird zu dieser Verbindung noch ein Kompatibilitätsstatus gespeichert.
Dieser Status kann
theoretisch vier Fälle annehmen:
aa) generelle Abwärtskompatibilität
Der Standardfall, siehe DS-Beispiel oben.
bb) generelle Aufwärtskompatibilität
Gibt's das, dass Spiele für eine Plattform generell auch auf der Vorgänger-Plattform laufen? Ein solcher Fall ist mir nicht bekannt.
cc) und dd) generelle Abwärts- und Aufwärtsinkompatibilität
Müssen wir in der Datenbank abbilden, dass GameBoy-Module nicht auf der PS3 laufen, und PS3-Discs nicht auf dem GameBoy?
Ich glaube nicht.
Der Fall der generellen Kompatibilität ist also recht einfach abzubilden. Ist die Plattform-Verbindung erstmal gespeichert, dann weiß das System, dass alle DS-Spiele auch auf dem 3DS laufen, und wir können entsprechende Auswertungen fahren. Schwieriger wird's bei:
4) Spielspezifische Kompatibilität
Als Beispiele sollen hier die von hydr0x genannten herhalten: Manche GameBoy-Spiele können auf dem GameBoy-Color in einem Farbmodus gespielt werden, umgekehrt besitzen manche GBC-Spiele einen Schwarz-Weiß-Modus für den GB.
Diese zwei Fälle bekommen zunächst wieder jeweils einen Eintrag in die oben genannte Plattform-Verbindungstabelle (Connection 9):
Bezugsplattform: Game Boy
andere Plattform: Game Boy Color
Kompatibilität: Spielspezifische Aufwärtskompatibilität
Bezugsplattform: Game Boy Color
andere Plattform: Game Boy
Kompatibilität: Spielspezifische Abwärtskompatibilität
Wenn ich hydr0x richtig verstanden habe, dann existiert der zweite Fall neben der generellen Abwärtskompatibilität zwischen beiden Plattformen. Das bedeutet also auch zwei Einträge in der Verbindungstabelle, einen für die generelle und einen für die spezifische Kompatibilität.
Die Verbindungstabelle wird dann über eine m-n-Beziehung (Connection 11 im Wiki) mit den ReleaseGroups verknüpft, um die einzelnen Spiele in der Datenbank zu identifizieren, die die jeweilige spezifische Kompatibilität besitzen.
In der Praxis sieht das dann so aus: Ein User legt für ein Spiel eine neue RG mit der Plattform "GameBoy" an. Das System sucht daraufhin in der Plattform-Verbindungstabelle nach spielspezifischen Einträgen mit Bezugsplattform "GameBoy" und findet das erste Beispiel oben. Der User wird daraufhin gefragt, ob dieses GameBoy-Spiel den Farbmodus des GameBoy Color unterstützt. Voila.
5) Subplattform-Kompatibilität
Als letztes für heute wollen wir noch den Windows-Fall abarbeiten. Von weiter oben ist ja klar, dass Windows als Plattform der Ebene 2 gespeichert wird, und die verschiedenen Versionen als Subplattformen der Ebene 3.
Die Abbildung dieser Fälle im Datenmodell erfolgt dann über eine schlichte m-n-Beziehung zwischen den Subplattformen und den ReleaseGroups (Connection 10 im Wiki). Zu jeder dieser Verbindungen kann dann ein Kompatibilitätsstatus gespeichert werden, einige Vorschläge für solche
habe ich schonmal ins Wiki gestellt.
In der Praxis wird der User bei der Anlage einer Windows-RG für ein Spiel gefragt, ob er Kompatibilitäts-Infos eingeben möchte und kann dann auf einer Sonderseite die ihm bekannten Kompatibilitäten speichern. Erscheint mir simpel.
Diese Subplattform-Funktionalität könnten wir später eventuell noch dazu nutzen, um Emulator-Kompatibilitäten abzubilden. Beispiel: Die Plattform SNES bekommt als Subplattformen verschiedene Versionen von Emulations-Software (zB ZSNES) zugeordnet und die User könnten dann über die Connection 10 im System speichern, ob ein Spiel in dieser Emulatorversion läuft oder nicht. Als Ergebnis hätten wir dann etwas Ähnliches
wie das hier. Falls wir das wollen, müsste man dann sicher die Verbindung zwischen den Tabellen "Platform" und Subplatform" auf m-n umstellen, da es sicher auch Software gibt, die mehrere Plattformen emuliert.
Puh, so weit erstmal! Die Problemfälle wie DOS passen hoffentlich irgendwie in dieses Modell rein. Sonst weine ich!