SQL Design Frage

8

Ich habe eine Tabelle mit 25 Spalten, wobei 20 Spalten Nullwerte für einige (30-40%) Zeilen haben können. Was kosten die Zeilen mit 20 Nullspalten? Ist das in Ordnung?

Oder

Ist es ein guter Entwurf, eine andere Tabelle zu haben, um diese 20 Spalten zu speichern und einen Verweis zur ersten Tabelle hinzuzufügen? Auf diese Weise schreibe ich nur dann in die zweite Tabelle, wenn Werte vorhanden sind.

Ich verwende SQL Server 2005. Wird in Zukunft auf 2008 migrieren.

Nur 20 Spalten sind varchar, rest smallint, smalldate

Was ich aufbewahre:   Diese Spalten speichern verschiedene Attribute der Zeile, zu der sie gehört. Diese Attribute können manchmal null sein.

Die Tabelle enthält ~ Milliarden Zeilen

Bitte kommentieren.

    
kheya 19.01.2011, 00:18
quelle

4 Antworten

2

Sie sollten die Art der Daten beschreiben, die Sie speichern. Es klingt, als würden einige dieser Spalten in eine andere Tabelle verschoben werden.

Wenn Sie zum Beispiel mehrere Spalten haben, die mehrere Spalten für den gleichen Datentyp darstellen, würde ich sagen, dass Sie sie in eine andere Tabelle verschieben. Wenn Sie andererseits so viele Spalten benötigen, um verschiedene Datentypen zu beschreiben, dann Sie müssen es möglicherweise so behalten, wie es ist.

Es hängt also davon ab, was Sie modellieren.

    
Jonathan Wood 19.01.2011 00:26
quelle
2

Gibt es Umstände, unter denen einige dieser Spalten benötigt werden? Wenn ja, dann sollten Sie vielleicht eine Form der Vererbung verwenden. Wenn dies beispielsweise Informationen über Patienten in einem Krankenhaus wären und einige Daten nur für weibliche Patienten sinnvoll wären, könnten Sie mit diesen Spalten eine FemalePatients-Tabelle erstellen. Diejenigen Spalten, die immer für weibliche Patienten gesammelt werden müssen, können dann in dieser separaten Tabelle als NOT NULL deklariert werden.

    
John Saunders 19.01.2011 01:00
quelle
2

Das hängt von den Datentypen ab (40 Nullable-Ints nehmen grundsätzlich den gleichen Platz ein wie 40 Nicht-Nullable-Ints, unabhängig von den Werten). In SQL Server ist der Speicherplatz mit gewöhnlichen Techniken ziemlich effizient. Im Jahr 2008 haben Sie die SPARSE-Funktion.

Wenn Sie die Tabelle vertikal mit einer optionalen 1: 1-Beziehung teilen, besteht die Möglichkeit, die beiden Tabellen mit einer Ansicht zu umhüllen und Trigger für die Ansicht hinzuzufügen, um sie aktualisierbar zu machen und die zugrunde liegende Implementierung auszublenden.

Es gibt also viele Optionen, von denen viele implementiert werden können, nachdem Sie die Daten laden und das Verhalten sehen.

    
Cade Roux 19.01.2011 01:10
quelle
1

Erstellen Sie Tabellen basierend auf den verschiedenen Attributen, die Sie haben. Wenn Sie also Daten haben, bei denen einige Ihrer Spalten nicht zutreffen, wäre es sinnvoll, diese Daten in einer Tabelle zu haben, die diese Spalten nicht enthält. Vermeiden Sie so weit wie möglich das Wiederholen desselben Attributs in mehreren Tabellen. Stellen Sie sicher, dass Ihre Daten mindestens in Boyce-Codd / 5. Normalform sind und Sie nicht weit gehen werden.

    
sqlvogel 19.01.2011 12:08
quelle

Tags und Links