2016-07-05 9 views
0

Ich entwerfe eine spezielle SQL Server-Tabelle mit 1M Zeilen täglich hinzugefügt. Die Tabelle enthält 3 Phasen. Das bedeutet, dass der Entitätslebenszyklus 4 Zustände hat:Brauchen Sie Hilfe für das physikalische Design einer großen Tabelle mit Zeilen in 3 Stufen

  • Status 1: Fügt eine neue Zeile ein und füllt die Spalten 1-15. Der Rest der Spalten bleibt NULL.

  • Zustand 2: Updates (bevölkert) Spalten 16-25

  • Zustand 3: Updates (bevölkert) Spalten 26-40

  • Zustand 4: Die Zeile kann zur Meldung verarbeitet werden.

  • Above Anforderungen stellt die folgenden Unzulänglichkeiten:

    • Alle Spalten 16-40 müssen nullable sein, da sie aufgefüllt werden, nachdem jede Zeile erstellt wird.
    • Da gibt es mindestens 2 Sätze von NULL-Spalten sind verpuppt (update) nach jeder Zeile erstellt wird, wird es viele Zerlegungen - ich nehme an, richtig?
    • Ich dachte, um diese Einheit auf 3 Tabellen zu brechen, aber wenn ich das tue, dann muss ich beitreten die 3 Tabellen während der Berichterstattung. Gibt es eine Technik oder ein Muster, die mir helfen, diese Tabelle effizienter zu machen?

    Antwort

    -1

    Wir hatten eine ähnliche Situation, wo die Spalten 1-3 den eindeutigen Schlüssel für das Dataset bilden und die Spalten 4-100 die Tabellendaten.

    Grundsätzlich wir brach es oben in: 1) eine Tabelle, die die 3-Säule eindeutigen Schlüssel sowie eine ID-Spalte (Datum, Identität, usw., wie erforderlich) 2) Eine Tabelle, die Schlüssel-Wert hält Paaren hält der Spaltenname/Nummer und Spaltenwert und einem FK an die ID in der Tabelle 1

    Tabelle 1

    ID | Date  | Col1 | Col2 | Col3 
    1 | 1/5/2016 | USA | USD | TRUE 
    2 | 1/5/2016 | UK | GBP | TRUE 
    3 | 1/5/2016 | UK | EUR | FALSE 
    4 | 1/6/2016 | USA | USD | TRUE 
    

    Tabelle 2

    ID | Column_No | Value 
    1 | 16  | 53 
    1 | 17  | Greenback 
    1 | 18  | Chicago 
    2 | 16  | 1.3 
    2 | 23  | Leeds 
    3 | 16  | 2.8 
    3 | 18  | Manchester 
    3 | 26  | 643 
    3 | 33  | MThatcher 
    3 | 34  | Union Jack 
    

    Es ar Es gibt viele Dinge zu beachten. wie Ihre Benutzer den Datensatz abfragen, wie Sie Updates erhalten, ob Sie den Verlauf aufbewahren müssen usw. Dies wird Ihnen helfen, das Tabellendesign und die Indizes zu verstehen.

    Dies ist eine übermäßig vereinfachte Antwort, aber möglicherweise weisen Sie in die richtige Richtung.

    +0

    Die von Ihnen erläuterte Idee funktioniert gut, wenn die Spalten gelegentlich (gefüllt) verwendet werden. Die Anforderung ist hier anders. Alle Zeilenspalten sind gefüllt. Das Problem ist, dass sie bei der INSERT-Zeit nicht gefüllt sind und dass es nachfolgende Aktualisierungen gibt. Übrigens, für das von Ihnen erläuterte Szenario sollten Sie sich Sparse Columns ansehen. –