Datenbankschema

Hallo Forum,

Ich habe heute eine Frage zum Datenbankdesign und hoffe ihr könnt mir Tipps geben.
Ich habe folgendes Szenario. Ein user kann auf einer Oberfläche verschiedene stitistische Auswertungen zu einem Factsheet “zusammenklicken”. Hierbei ist die Oberfläche in verschiedene Blöcke aufgeteilt (quasi wie eine Matrix oder ein Schachbrett) jedes feld hat dadurch natürlich dann eine eindeutige Position (x und y), wobei ein Element auch über zwei oder mehr Spalten hinweg gehen kann (aber immer nur über eine Zeile). Der user kann jetzt in jedem Feld den Inhalt aus verschiedenen Möglichkeiten auswählen. Dies sind z.B. statistische Kennzahlen (als text), ein Diagramm mit den Datenwerten, eine Choroplethenkarte oder einfach einen einzelnen Datenwert. So kann der user sich eine Art Factsheet von bestimmten Daten aus der Datenbank zusammenstellen. Das funktioniert auch alles soweit sehr gut.
Jetzt möchte ich gern die gemachten Einstellungen (also die Inhalte der einzelnen Felder) in der Datenbank speichern und später wieder aufrufen, damit man nicht jedesmal alles neu auswählen muss.
Hier bin ich jetzt aber unsicher was das Design angeht, bzw. welche tabellenstruktur usw. ich brauche und hoffe jemand kann mir dazu Anregungen oder Tipps geben.

Im Prinzip habe ich ja 3 verschiedene mögliche Feldinhalte (Kennzahlen, Diagramme, Karten). Es kommen aber mit der zeit wahrscheinlich noch weitere mögliche Feldinhaltstypne hinzu. Wobei die Diagramme und Karten über einen Webservice aus entsprechenden Attributen erstellt werden. Jedes Feld hat, nachdem der user einen Feldinhalt (Kennzahlen, Diagramme, Karten) gewählt hat, unterschiedliche Attribute. Nur die Position, die Feldhöhe und die Feldbreite ist allen gemeinsam.
Jetzt ist meine Frage wie es am sinnvollsten ist, die Attribute in die DB zu speichern. Theoretisch könnte ich ja eine Tabelle machen, wo dann alle Attribute drin sind. Hat ein Inhaltstyp das Attribut nicht, dann bleibt das Feld leer bzw NULL. Dadurch habe ich aber sehr viele leere Attribute. Ausserdem sind bestimmte Attribute beim entsprechenden Inhaltstyp Pflichtattribute, sodass etwas eingetragen werden muss. das Feld darf also nicht leer sein. Somit würde eine einzelnen Tabelle nicht funktionieren, oder?
Momentan würde ich für jeden Inhaltstyp eine eigene Tabelle anlegen. Ich bin mir aber nicht sicher, ob das die beste Möglichkeit ist. Theoretisch könnte es ja so z.B. doppelte Positionen geben, d.h. ich kann in die einen tabelle die Position x=2 und y=4 oder so eintragen und in einen anderen Inhaltsytp auch. Das kann man zwar durch php abfangen, aber ich frage mich ob es da eine bessere Möglichkeit geben würde.

Hat jemand eine Anregung oder eine Hilfe für mich? ich hoffe es ist alles verständlich, ansonsten fragt bitte einfach nach.

Lieber Gruss und vielen Dank im Voraus
Hanno

Mach Dich mal schlau zum EAV-Design. Aber das hat auch so seine nachteile.

Um die Attribute für die Darstellung zu speichern könntest du dir auch mal den hstore-Datentyp anschauen, damit arbeite sehr gerne wenn ich relativ unspezifische Daten zu verwursten habe. Oder du machst das mit JSON oder XML. Pflichtangaben müsstest du halt in deiner Anwendung setzen. Für jeden Inhaltstyp eine eigene Tabelle anzulegen funktioniert IMHO nur wenn die Anzahl überschaubar ist und es macht das Datenmodell unübersichtlicher.

Gruß Uwe