Vererbung der LINQ to SQL Klassen in der MsSQL-Datenbank umsetzen

Palladin007

assimiliert
Moin

Zu Beginn: Ich arbeite mit C# und will eine MsSQL-Datenbank über LINQ to SQL nutzen.


Dieses Bild ist ein sehr gekürzter Ausschnitt aus meinem Datenbank-Diagramm, das ich mir erstellt habe.

db.jpg

Account und Character sind sich so ähnlich, dass das geradezu nach Vererbung schreit, denn an sich hat der Character nur eine weitere Eigenschaft alleine besitzt, die ich nicht einmal im Diagramm aufgenommen habe, weil sie sowieso erst klar wird, wenn man den Rest der Datenbank kennt.
Account hat dazu noch das Passwort und die eMail-Adresse, alles andere ist gleich, deshalb die Tabelle AccountBase.

Ich habe mir das so gedacht, dass ich für jeden Character oder Account eine Zeile der AccountBase-Tabelle erstelle und die ID als Eigenschaft speichere. So kann ich dann die Daten finden.
Das Problem an der ganzen Sache ist allerdings, dass ich auf diese Weise nicht oder nur über nervige Umwege von einer Zeile in AccountBase auf den Account oder den Character zu schließen. Um überhaupt erkennen zu können, ob die Zeile nun ein Account ist oder ein Character, habe ich eine Spalte AccountType eingefügt (die ich auf dem Bild leider vergessen habe). Sie beinhaltet entweder Account oder Character.

Auf dem Bild sind jetzt noch drei weitere Tabellen gezeigt, die stellvertretend für die anderen Tabellen die Bauweise zeigen sollen, wie ich das Konzept aufgebaut habe. Im Gesamtumfang ist die Datenbank jedoch deutlich umfangreicher.

Dennoch ein Grund-Umriss:
Ich möchte eine Plattform für ein recht einfaches Internet-Spiel, das auf den Namen RPG hört.
Es kann ein Account eröffnet werden, der wiederum mehrere Character beinhalten kann. Jeder Character soll in seinem kleinen Bereich ein vollständiger Account sein, daher hat er z.B. auch ein Nachrichten-System. Außerdem muss so nicht immer ein Passwort eingegeben werden, es kann jeder Character nach bestimmten Kriterien überwacht werden und so weiter.
Das ist der Grund, weshalb ich das so aufbaue.


Auf dem Bild habe ich jetzt ganz simpel die ID von AccountBase in entweder Account oder Character hinterlegt, was soweit auch funktioniert, aber ich bekomme das schlicht und einfach nicht im LINQ to SQL umgesetzt. Die Klassen habe ich (hoffentlich) korrekt implementiert, die Frage ist nur, wie ich das nun in der fertigen SQL-Datenbank umbaue.

Ich habe mich dazu bereits hier belesen.
Für mich kommt da eigentlich nur die erste Variante in Frage, allerdings bleiben da noch ein paar Fragen:

Muss ich die ID der "Ober-Tabelle" in den "Unter-Tabellen" fest legen, so wie ich das gemacht habe?
Ist eine 1:n Beziehung notwendig, oder überflüssig?



Gruß
 
Oben