2017-03-21 5 views
0

Ich bin nicht so erfahren mit SQL-Server, aber ich muss eine Lösung für das folgende Problem finden.SQL Server-Tabelle mit mehreren Eintragstypen

Ich erstelle eine Datenbank, die Autos zum Verkauf hält. Autos werden über eine Handvoll Wege (Verträge) gekauft, hier sind 2 Beispiele der benötigten Preisfelder:

Ich habe unnötige Felder aus Gründen der Klarheit weggelassen.

  • Typ: Personal Contract Hire
  • Fields: InitalPayment, MonthlyPayment

  • Typ: Personal Contract Purchase

  • Fields: InitialPayment, MonthlyPayment, GFMVPayment

Die Unterschiede sind subtil.

Die Frage ist, wäre es besser, eine Tabelle für jeden Typ zusammen mit einer Art Header-Tabelle zu erstellen oder eine einzelne Tabelle mit ein paar zusätzlichen Feldern zu erstellen? Oder etwas anderes?

Ich weiß, dass die Puristen mich dafür hassen werden, sogar die Frage der Redundanz zu stellen, aber die Lösung muss auch praktisch sein, und ich mache mir Sorgen, etwas zu komplizieren, das nicht sein muss.

Ich verwende Entity Framework als mein ORM.

Irgendwelche Gedanken?

+0

Es hängt auch davon ab, wie Sie sie abfragen möchten. Und wie viele Datensätze für die beiden Typen würde es geben? Wäre es sehr schief oder etwa 50-50? Wird die Anzahl der Zeilen "viel" sein (mehrere Millionen)? –

+0

@RaduGheorghiu Meine Gedanken genau. Ich möchte nicht etwas, das durch das ORM schwer zu benutzen ist. Ich würde erwarten, dass es Tausende von Reihen gibt, aber nicht Zehntausende. –

Antwort

1

Ich habe noch nie eine Datenbank entworfen, aber ich arbeite jeden Tag mit ihnen zusammen. Die Datenbanken, auf die ich stoße, wurden von Fachleuten mit jahrelanger IT-Erfahrung entworfen, und viele unserer Tabellen stehen vor dem gleichen Problem, das Sie hier beschreiben. Jedes Mal, wenn die Antwort erstellt wird, erstellen Sie eine einzelne Tabelle mit einigen zusätzlichen Feldern. Ich weiß, dass dies vielleicht nur die Präferenz des IT-Teams ist und dass dies nicht der einzige Weg ist, aber als jemand, der Dutzende von Business-Analytics-Abfragen pro Tag schreibt, kann ich zuversichtlich sagen, dass dieses Design sehr natürlich und einfach ist benutzen.

Sie werden wahrscheinlich in Zukunft auf dieses Problem stoßen. Sie können sogar einen anderen Typ erstellen, für den ein viertes Feld erforderlich ist. Stellen Sie sich vor, wenn Sie jedes Mal eine neue Tabelle hinzugefügt haben. Ihre Datenbank würde schnell schwer zu verwalten sein, und jeder, der sie benutzt, müsste sich merken, welche drei oder vier Tabellen Zugang zu fast den gleichen Daten bieten, mit nur kleinen Unterschieden. Das ist nicht sehr benutzerfreundlich.

Insgesamt empfehle ich, eine einzelne Tabelle mit einigen ungenutzten Feldern zu erstellen.

+0

Danke für die Antwort. Ich neige dazu, zuzustimmen. Ich habe nach Vererbungsmustern gesucht (mehrere miteinander verknüpfte Tabellen) und um ehrlich zu sein scheint es, als wäre es ein Problem, etwas abzufragen, sogar etwas einfaches wie das Abrufen von Kundenbestellungen (1 Kunde, mehrere Bestellungen, verschiedene Typen in verschiedenen Tabellen)). Das Schöne ist, dass sich die Preisfelder kaum (wenn überhaupt) einmal ändern werden, wenn ich es richtig verstehe und ich wahrscheinlich mit einer einzigen Methode in linq davon komme, die Daten zu sortieren. –