Grundlagenfragen: breite Tabellen mit vielen nvarchar-Feldern

30/11/2007 - 11:30 von Liz Helmecke | Report spam
Hallo NG,

einige Tabellen werden mit der Zeit immer breiter, weil die Benutzer immer
wieder mal neue Felder dazu haben wollen.
Dadurch wird die maximale Byteanzahl von 8060 pro Zeile überschritten (und
zwar bei weitem).

Wat mach ich nu?
Tabellen zerlegen, für die breiten Felder eine 1 zu1 Anhàngsel-Tabelle
erstellen?
Besser normalisieren (und dabei leider die ganze Anwendung nochmal
umprogrammieren)?
Oder gibt es da irgendwelche Auslagerung-Möglichkeiten?

Danke und Gruß
Liz
 

Lesen sie die antworten

#1 Frank Kalis
30/11/2007 - 12:48 | Warnen spam
"Liz Helmecke" wrote:

einige Tabellen werden mit der Zeit immer breiter, weil die Benutzer immer
wieder mal neue Felder dazu haben wollen.
Dadurch wird die maximale Byteanzahl von 8060 pro Zeile überschritten (und
zwar bei weitem).

Wat mach ich nu?
Tabellen zerlegen, für die breiten Felder eine 1 zu1 Anhàngsel-Tabelle
erstellen?
Besser normalisieren (und dabei leider die ganze Anwendung nochmal
umprogrammieren)?
Oder gibt es da irgendwelche Auslagerung-Möglichkeiten?




Das ist so eine klassische "It depends..." Frage.

Generell bin ich der Meinung, dass der Zweck der Anwendung die Mittel
heiligt. Geht es um Rapid Application Development (oder OLAP), kann man
durchaus 5 gerade sein lassen und Normalierungsformen bewusst missachten,
wenn es halt um eine schnelle Umsetzung der Anforderungen geht. oder, wie bei
OLAP, primàr um den Performancegewinn durch Denormalisierung und Vermeidung
von JOIN Operationen.

Hat man "mehr Zeit" und/oder bei der Applikation handelt es sich um ein
Produkt mit mehr oder weniger festen Updatezyklen, sollte das DB Design
stàrker theoretischen Modellen genügen, sprich Normalisierung in die x-te
Normalform.

In Deinem Fall wirst Du erst einmal um eine Auslagerung in weitere
Hilfstabellen mit einer 1:1 Verknüpfung nicht herumkommen, damit die Benutzer
die Applikation weiter benutzen können.

Benötigt Ihr tatsàchlich nvarchar Spalten? Oder können es auch varchar
Spalten sein? Dadurch liesse sich der Speicherbedarf dieser Spalten um die
Hàlfte reduzieren. Möglich wàre auch der Einsatz von text oder varchar(MAX)
Spalten, da diese nur den Root Pointer von 16 bytes in der Datenzeile
speichern und der Rest "woanders" gespeichert wird.

Aber das sollte dann im Einvernehmen mit den Business-Usern geklàrt werden.
Frank Kalis
Microsoft SQL Server MVP
Webmaster: http://www.insidesql.de

Ähnliche fragen