2009-07-24 16 views
0

Angenommen, ich habe folgendes Tabellenschema:erweiterte Eigenschaft Entwurf

ID | Name | Width | Height | Size 

Überlegungen sind, um darüber nachzudenken, wenn sie mit einer Eins-zu-Eins-Beziehung in dieser Tabelle in zwei Tabellen zu brechen?

ZB:

ID | Name 
and 
ID | Width | Height | Size 

Meine Sorge ist, dass ich eine Menge von Spalten auf den Tisch haben werde (und nicht nur fünf, hier zu Veranschaulichungszwecken ist nur mit hohen Wahrscheinlichkeit neue Spalten in Zukunft hinzuzufügen) . Ich bin besorgt, dass größere Tischreihengrößen negative Auswirkungen auf die Leistung und/oder die Klarheit des Designs haben können. Ist das wahr? Und Performance-Hit im Vergleich zu Tabellen beitreten.

Antwort

0

Sie sollten wahrscheinlich verwandte Informationen gruppieren (wie der Name des Produkts und die Spezifikationen), vor allem, weil die Informationen zusammen gehören.

Wenn Sie sie trennen möchten, ist der einzige wirkliche "Boost", den Sie haben werden, wenn Sie nur auf die erste Tabelle zugreifen möchten, da die zweite Tabelle Informationen aus der ersten Tabelle benötigt. (Sie benötigen den Namen, um das Produkt zu identifizieren)

Ich würde wahrscheinlich mit der ursprünglichen Lösung bleiben, es sei denn, Sie wollten eine Tabelle für Größen und eine Tabelle für Produkte und eine Beziehung zwischen diesen beiden erstellen.

+0

Ich brauche nicht immer die Informationen auf der zweiten Tabelle (oder dritten oder vierten). Und wenn ich es brauche, kann ich es auf eine faule Last setzen. –

+0

Meine Frage ist, sind die spezifischen Sätze der Breite - Höhe - Größe - Etc Werte? Wie wenn die meisten Produkte nur mit X-Variationen kommen, wäre es wahrscheinlich besser, eine Variablentabelle zu erstellen, und die linke Seite wird mit Meta-Informationen verknüpft. –

+0

Das waren nur Illustrationen, und nein, jedes Produkt wird nur eine Variation haben und das ist fast immer einzigartig. –

1

As per BOL:

übertreffen damit die 8060-Byte-Zeilengrößenbegrenzung könnte die Leistung auswirken, da SQL Server 2005-Datenbank-Engine immer noch eine Grenze von 8 KB pro Seite unterhält. Wenn eine Kombination aus benutzerdefinierten Spalten vom Typ varchar, nvarchar, varbinary, sql_variant oder CLR diesen Grenzwert überschreitet, verschiebt das Datenbankmodul die Datensatzspalte mit der größten Breite auf eine andere Seite in der Zuweisungseinheit ROW_OVERFLOW_DATA, während ein 24-Byte-Zeiger beibehalten wird auf der Originalseite. Das Verschieben großer Datensätze auf eine andere Seite erfolgt dynamisch, wenn Datensätze basierend auf Aktualisierungsvorgängen verlängert werden. Aktualisierungsvorgänge, die Datensätze verkürzen, können dazu führen, dass Datensätze auf die ursprüngliche Seite in der Zuordnungseinheit IN_ROW_DATA verschoben werden. Auch das Abfragen und Ausführen anderer Auswahlvorgänge, z. B. Sortieren oder Verknüpfen großer Datensätze mit Zeilenüberlaufdaten, verlangsamt die Verarbeitungszeit, da diese Datensätze synchron statt asynchron verarbeitet werden.

Raj

+0

Haben Sie versucht, den Unterschied zwischen diesem und dem Overhead von Joins zu vergleichen? –

+0

Eine ehrliche Antwort wäre NEIN.Aber ich bin auf dieses Szenario gestoßen, als ich feststellte, dass eine Tabelle mit Zeilendaten von mehr als 8060 Bytes schlecht funktionierte. Ich konnte sehen, dass eine gute Verbesserung mit der vertikalen Partitionierung geholfen hat. Durch die vertikale Partitionierung können Abfragen weniger Daten scannen. Dies erhöht die Abfrageleistung. Eine Tabelle, die 7 Spalten enthält, von denen nur 4 im Allgemeinen referenziert werden, kann davon profitieren, die letzten drei Spalten in eine separate Tabelle aufzuteilen. – Raj

0

Zunächst ist Ihr Ansatz falsch. Entwerfen Sie Ihre Datenbank so, wie Sie denken, dass sie entworfen werden sollte, indem Sie entsprechende Normalisierung und so weiter verwenden. Nur wenn Sie ein tatsächliches Leistungsproblem haben, sollten Sie anfangen, sich über solche Dinge Gedanken zu machen.

Die Anzahl der Spalten spielt keine Rolle über Zeilengrenzen und dergleichen hinaus. Wenn Sie zu Hunderten (oder Tausenden) von Spalten kommen, können Sie zu dem Punkt kommen, wo Sie es in mehrere Tabellen teilen müssen, aber machen Sie sich keine Sorgen darüber, bis es tatsächlich passiert.

+1

Ich versuche zu denormalisieren, da ich ein Problem vorhersehen kann und möchte so schnell wie möglich abfangen. Nicht nachdem wir ein Performance-Problem hatten. –