<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>ixto-Blog &#187; Server</title>
	<atom:link href="http://www.ixto.de/blog/tag/server/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.ixto.de/blog</link>
	<description>Business Intelligence, Database Consulting, Software Development</description>
	<lastBuildDate>Mon, 26 Sep 2011 09:23:18 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Beliebig viele Tabellenspalten beim SQL Server 2008: Sparse Columns</title>
		<link>http://www.ixto.de/blog/sql-server-2008/beliebig-viele-tabellenspalten-beim-sql-server-2008-sparse-columns/</link>
		<comments>http://www.ixto.de/blog/sql-server-2008/beliebig-viele-tabellenspalten-beim-sql-server-2008-sparse-columns/#comments</comments>
		<pubDate>Mon, 14 Jan 2008 16:12:29 +0000</pubDate>
		<dc:creator>Markus Raatz</dc:creator>
				<category><![CDATA[SQL Server 2008]]></category>
		<category><![CDATA[2008]]></category>
		<category><![CDATA[Columns]]></category>
		<category><![CDATA[Server]]></category>
		<category><![CDATA[Sparse]]></category>
		<category><![CDATA[SQL]]></category>

		<guid isPermaLink="false">http://www.ixto.de/blog/sql-server-2008/beliebig-viele-tabellenspalten-beim-sql-server-2008-sparse-columns/</guid>
		<description><![CDATA[Ich hoffe, jeder Leser dieses Blogs hat beim Datenbank-Design gut aufgepasst, dann wissen sie oder er ja, dass man keine unendlich breiten Tabellen erzeugen soll. Aber gut, mal unter uns und nicht weitersagen: manchmal geht es eben nicht anders, aber dann auf eigenes Risiko! Mitunter wird der SQL Server nur als so eine Art »Excel [...]]]></description>
			<content:encoded><![CDATA[<p style="margin: 3pt 0cm" class="MsoNormal">Ich hoffe, jeder Leser dieses Blogs hat beim Datenbank-Design gut aufgepasst, dann wissen sie oder er ja, dass man keine unendlich breiten Tabellen erzeugen soll. Aber gut, mal unter uns und nicht weitersagen: manchmal geht es eben nicht anders, aber dann auf eigenes Risiko! Mitunter wird der SQL Server nur als so eine Art »Excel auf dem Server« missbraucht, und seit Excel 2007 jetzt auch 16.384 Spalten speichern kann (statt vorher nur 256) ist natürlich die Frage: kann der SQL Server das auch? Nun, bis zur Version 2008 kann er das nicht, da beherrscht er »nur« 1024 Spalten. Jetzt kann er diese Grenze sprengen, aber nur, wenn die zusätzlichen Spalten nur spärlich (»<span class="ZeichenKursiv"><em>sparse</em></span>«) gefüllt sind!</p>
<p><span id="more-25"></span><br />
<br\></p>
<p style="margin: 3pt 0cm" class="MsoNormal">Aber zurück zum Design! Es ist wirklich eine Lücke im relationalen Modell: Ich entwerfe für Backwaren eine Produkttabelle, in der will ich etwa für Berliner (oder wenn man mich als Berliner fragt: Pfannkuchen) die Füllung abspeichern; Pflaumenmus, Eierlikör, etc. Für Croissants passt das dann auch noch, aber bei Brötchen und Brot ist diese Spalte natürlich immer leer, also NULL! Andersherum ist es mit dem Belag: bei Brötchen mag da noch manchmal Sesam, Mohn oder Kürbiskern drin stehen, aber die Mehrzahl der Produkte ist natürlich überhaupt nicht belegt, also bleibt die Belag-Spalte NULL.</p>
<p><br\></p>
<p style="margin: 3pt 0cm" class="MsoNormal">Gängige Lösungen für dieses Design-Problem wären etwa eine Zusatz-Tabelle mit den Spalten Produktnummer – Attribut (Inhalt z.B. »Belag«) – Wert (Inhalt z.B. »Sonnenblumenkerne«). Diese Tabelle ist aber relational etwas schwer auszuwerten, außer mit dem PIVOT-Operator. Man könnte auch eine Spalte mit dem unten beschriebenen XML-Datentyp anhängen, aber leider ist ein großes XML-Schema nicht besonders effektiv, wenn es fast immer leer ist. Im SQL Server 2008 kann man nun solche spärlich gefüllten Spalten von Anfang an als SPARSE bezeichnen, dann nehmen sie, wenn sie leer bleiben, keinen Platz weg. Und so kann man dann auch viele tausend zusätzliche Spalten anhängen!</p>
<p style="margin: 3pt 0cm" class="Listing"><font size="2" face="Courier New">CREATE TABLE dbo.Produkte(<br />
  ProduktID                int              PRIMARY KEY IDENTITY<br />
, Produktnummer             char(12)          NOT NULL<br />
, Produktbezeichnung        nvarchar(255)      NOT NULL<br />
, Belag                   nvarchar(30)       <span class="ZeichenListingFett"><strong>SPARSE</strong></span> NULL<br />
, Füllung                  nvarchar(30)       <span class="ZeichenListingFett"><strong>SPARSE</strong></span> NULL<br />
, Fettanteil               numeric(3,1)       <span class="ZeichenListingFett"><strong>SPARSE</strong></span> NULL<br />
/* …hier noch viele hundert SPARSE-Spalten */)</font></p>
]]></content:encoded>
			<wfw:commentRss>http://www.ixto.de/blog/sql-server-2008/beliebig-viele-tabellenspalten-beim-sql-server-2008-sparse-columns/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

