Sollte ich eine Spalte oder eine 1-1-Tabelle hinzufügen, wenn die Eigenschaft normalerweise null ist?

7

Wir müssen eine neue eindeutige Eigenschaft hinzufügen, die nur für eine bestimmte Teilmenge relevant ist (weniger als 1%). Wir dachten, es ist besser, eine neue Tabelle hinzuzufügen, die 1-1 ist, als eine neue Spalte hinzuzufügen, die 99% der Zeit Nullen enthält.

Ist ein neuer Tisch der bevorzugte Weg?

Mithir
quelle

Antworten:

8

Wenn eine der folgenden Bedingungen erfüllt ist, erstellen Sie eine separate Tabelle.

  • Sie arbeiten in SQL 2005 oder niedriger
  • Ihre neue Spalte ist einer der folgenden Datentypen: Geografie, Geometrie, Bild, NText, Text, Zeitstempel oder ein benutzerdefinierter Datentyp
  • Kein Standardwert
  • Keine Vorschriften
  • Spalte ist keine berechnete Spalte

Wenn keines davon zutrifft, können Sie eine SPARSESpalte verwenden.

ALTER TABLE tablename ADD mysparsecolumn INT SPARSE NULL

Hier ist BOL in SPARSE- Spalten. Vielleicht möchten Sie sich auch COLUMN SETS ansehen . Eine Sparse-Spalte ist eine Spalte, die für NULL-Werte optimiert ist und laut BOL keinen Platz beansprucht, wenn der Wert NULL ist. In BOL gibt es Tabellen, die Ihnen einen Eindruck von den tatsächlichen Einsparungen geben, die durch die Verwendung von SPARSESpalten erzielt werden.

Alles, was gesagt wird, wenn Sie eine separate Tabelle verwenden möchten, können Sie sicherlich. Die Nachteile sind, dass Sie insgesamt etwas Platz verlieren, je nachdem, wie groß Ihr Primärschlüssel ist (das Minimum, das Sie zusammen mit der zusätzlichen Spalte in die neue Tabelle aufnehmen müssen), und es ist Verleumdung, aufgrund des zusätzlichen etwas langsamer zu sein beitreten.

Kenneth Fisher
quelle
3

Wenn Ihr Hauptanliegen die Effizienz beim Speichern und Abrufen von Daten ist, würde ich empfehlen, sparseder vorhandenen Tabelle eine neue Spalte hinzuzufügen . Wenn Sie jedoch mit einem OLTP-System arbeiten, haben Sie möglicherweise gute Gründe, eine neue Tabelle mit einer Beziehung von 1-0..1 zu wählen.

Beispielsweise gibt es viele ältere Anwendungen, die ein vorhandenes Modell verwenden und möglicherweise aufgrund einer neuen Spalte beschädigt werden. Wenn es sich bei einer neuen Spalte um einen Blob handelt, wirkt sich dies select *in der Legacy-Anwendung (obwohl dies keine sehr gute Vorgehensweise ist, sind solche Abfragen häufig) auf die Leistung aus.

Zweitens kann auf eine neue Spalte mit einem anderen Muster zugegriffen werden (z. B. lesen Sie meistens alte Spalten, führen jedoch viele Aktualisierungen der neuen Spalte durch).

Außerdem habe ich viele Tabellen gesehen, die am Anfang mehr oder weniger normalisiert waren, aber am Ende Hunderte von Spalten hatten. Einige der Spalten wurden nicht mehr verwendet, andere passen nicht zum Modell (es ist sogar besser zu sagen, dass das Modell zerstört wurde). Dieser Hinweis kommt wahrscheinlich nicht in Frage, ist aber meiner Meinung nach erwähnenswert ...

a1ex07
quelle