Tab-Design-Problem: 300 Spalten!
am 30.01.2008 15:20:08 von Ingo Haase
Hallo
Ich bin bei der Planung einer DB-Tabelle.
Problemstellung:
Gespeichert werden Daten aus der Werkstoffprüfung.
Eine Probe (ein Werkstück) wird auf verschiedene Parameter
geprüft,z.B.
Prüfung Maßhaltigkeit: [Länge, Breite, Höhe, Prüfer, Prüfdatum]
Prüfung Dichte: [Einwaage, Auswaage, Prüftemperatur, Prüfer,
Prüfdatum]
Prüfung Chemie: [Chlorid, Blindwert_Cl, Sulfat, Kohlenstoff, Natrium,
Diesunddas ]
und 17 weitere festgelegte Prüfungen!
D.h. eine Probe kann bis zu 20 Prüfungen unterzogen werden, meist sind
es aber deutlich weniger, je nach Fragestellung. Jede einzelne Prüfung
besteht aus 5-15 Parametern. Die Beziehungen Probe->Prüfung ist immer
eindeutig, eine Probe kann nur genau eine Dichte usw. haben.
Wie soll sowas in einer DB bzw. Tabelle abgebildet werden?
Alles in eine Tabelle? Das wäre am einfachsten, gäbe aber eine Tabelle
mit an die 300 Spalten, wovon die meisten wohl NULL-Werte hätten. Das
ist sehr unschön, widerspricht aber nicht unbedingt den
Normalisierungsregeln. Vorne die ProbenID, und dann hintereinander weg
die Prüfwerte.
Oder jede Prüfung in eine eigene Tabelle mit 1:1-Beziehungen zur
Probe? Geht das überhaupt? Wie sieht die dann aus und wie fragt man
das ab? 20 1:1 Beziehungen hintereinander?
Ich brauch Hilfe.
Ingo Haase
Re: Tab-Design-Problem: 300 Spalten!
am 30.01.2008 16:15:35 von Siegfried Schmidt
Hallo Ingo,
> D.h. eine Probe kann bis zu 20 Prüfungen unterzogen werden, meist sind
> es aber deutlich weniger, je nach Fragestellung. Jede einzelne Prüfung
> besteht aus 5-15 Parametern. Die Beziehungen Probe->Prüfung ist immer
> eindeutig, eine Probe kann nur genau eine Dichte usw. haben.
>
>
> Wie soll sowas in einer DB bzw. Tabelle abgebildet werden?
Wenn das Schema die Tendenz zur gelegentlichen Änderung/Erweiterung hat,
dann gleich dynamisch abbilden als M:N-Beziehung mit Wert zwischen Probe
und Prüfung/Parameter.
Dabei je nach Bedarf Werte mit Triggern auf 1:0/1 verriegeln oder die
Beziehungstabelle gleichzeitig als Eingabe/Änderungshistorie laufen
lassen.
> wie fragt man
> das ab? 20 1:1 Beziehungen hintereinander?
Die Abfrage wäre ein zweifacher Join.
Siegfried
--
http://www.schmidt.ath.cx
Re: Tab-Design-Problem: 300 Spalten!
am 30.01.2008 16:16:50 von Daniel Fischer
Ingo Haase!
> Oder jede Prüfung in eine eigene Tabelle mit 1:1-Beziehungen zur
> Probe? Geht das überhaupt?
Ja, eine Tabelle für Daten zu den Proben, sowie eine Tabelle für jede
Prüfung, mit ID der Probe als gemeinsamem Schlüssel.
> Wie sieht die dann aus und wie fragt man
> das ab? 20 1:1 Beziehungen hintereinander?
Du kannst auch alle zusammenjoinen. Dann sieht das Ergebnis wieder
so aus wie vorher, aber du hast die Daten wenigstens ordentlich
aufgeräumt.
Bauchst du tatsächlich als Ergebnis immer *alle* Prüfungen?
GruÃ
Daniel
Re: Tab-Design-Problem: 300 Spalten!
am 30.01.2008 16:21:46 von Thomas Rachel
Ingo Haase schrieb:
> Hallo
>
> Ich bin bei der Planung einer DB-Tabelle.
>
> Problemstellung:
> Gespeichert werden Daten aus der Werkstoffprüfung.
> Eine Probe (ein Werkstück) wird auf verschiedene Parameter
> geprüft,z.B.
>
> Prüfung MaÃhaltigkeit: [Länge, Breite, Höhe, Prüfer, Prüfdatum]
> Prüfung Dichte: [Einwaage, Auswaage, Prüftemperatur, Prüfer,
> Prüfdatum]
> Prüfung Chemie: [Chlorid, Blindwert_Cl, Sulfat, Kohlenstoff, Natrium,
> Diesunddas ]
> und 17 weitere festgelegte Prüfungen!
>
> D.h. eine Probe kann bis zu 20 Prüfungen unterzogen werden, meist sind
> es aber deutlich weniger, je nach Fragestellung. Jede einzelne Prüfung
> besteht aus 5-15 Parametern. Die Beziehungen Probe->Prüfung ist immer
> eindeutig, eine Probe kann nur genau eine Dichte usw. haben.
>
>
> Wie soll sowas in einer DB bzw. Tabelle abgebildet werden?
Möglichkeit 1: Pro Prüfung eine Tabelle, dann hast Du wenigstens snicht
so viele NULLs drin.
Dann hast Du
* eine Tabelle probe mit ID (auto_increment) und evtl. anderen Parametern
* eine Tabelle masshalt mit ID (Fremdschlüssel zu probe) und den o.g.
Parametern
usw.
2. Möglichkeit:
Eine Tabelle Prüfungen (id auto_increment, name varchar(30))
mit "MaÃhaltigkeit", "Dichte", "Chemie", ...
Eine Tabelle Werte (id int auto_increment, prf_id int, name varchar(30))
mit (1,"Länge), (1,"Breite"), (1,"Höhe"), (2,"Einwaage"), ..., usw.
Das sind die "Metatabellen", sag ich mal.
Dann gibt es
* eine Tabelle Proben, in der die Proben eingetragen und mit ID versehen
werden.
* eine Tabelle Prüfung, in der durchgeführte Prüfungen eingetragen
werden mit ID auf Probe, ID auf die Metatabelle Prüfungen, Prüfer (evtl.
auch mit Fremdschlüssel) und Datum.
* eine Tabelle Werte mit ID auf Prüfung, ID auf die "Meta-Werte" und dem
MeÃwert.
So in der Richtung eben...
Thomas