[jedes DBMS] Datenbankdesign

rrobbyy

Mitglied
Hallo zusammen,

wir bauen eine neue DB auf, die in einem Punkt etwas knifflig wird und wir nicht genau wissen, welchen Weg wir einschlagen sollen.

(vereinfachte Darstellung der Tabellen)

Tabelle Produkttyp mit den Spalten "ID" und "Produktyp"
Tabelle Ausführung mit den Spalten "ID" und "Ausführung"
Relation AusführungendesProdukttypes 1:n

Zu jedem Typ gibt es also bestimmte Merkmale.

Wir wollen aber, dass nur bestimmte "vorselektierte" Daten zu einem Produkttyp im Front-End auswählbar sind.

Bsp.:
Es gibt diese Ausführungen, die auch so als Datensatz in der Tabelle "Ausführung" erfasst würden: (IDs lasse ich mal weg)
Single
Double
Triple
Elektrisch
Hydraulisch
mechanisch

Nicht jeder Produkttyp ist aber mechanisch oder hydraulisch oder single oder double. Damit macht es für den End-User auch keinen Sinn diese Daten als Auswahl anzeigen zu lassen. Wir möchten also eine abhängige Auswahlbox ermöglichen.

Nur wie designen wir das in der DB?

Wir würden diese Datenabhängigkeiten in einer Art Matrix speichern. Die Spalten sind die Produkttypen, die Zeilen die Daten der Referenztabellen.
Eine Möglichkeit ist, sobald ein neuer Produkttyp (mehr als 10 werden es definitiv nicht) erfasst wird, eine weitere Spalte in der Matrix zu erzeugen. Danach muss dann für jeden Datensatz aus den Referenztabellen entschieden werden, ob es für diesen Typ Sinn macht oder nicht.

Wir würdet ihr das angehen?

Vielen Dank vorab!
 
Hi

Produkttyp
-ID
-Name

Ausführung
-ID
-Name

TypHatAusführung
-ProduktID
-AusführungsID

...sowas in der Art?
Dass du bei einem neuen Produkt die möglichen Auführungen festlegen musst
wird dir durch kein mögliches DB-Design erspart.

Btw., das ist eher nxn statt 1xn.
Ein Produkt kann mehrere Ausführungen haben,
und eine Ausführung kann bei mehreren Produkten in Verwendung sein.
 
TyphatAusführung ist korrekt, ganz genau.

die möglichen Auswahlen zum Produkttyp müssen natürlich manuell vorab erfasst werden. Das ist auch ok.

Deine Anmerkung zu n:m stimmt, wenn ich tatsächlich die Datensätze aller Tabellen miteinander in Beziehung setze.

Was ich jedoch dachte:
Wenn ich eine Tabelle erzeuge, in der ich per Programmcode Spalten hinzufüge oder entferne (je nach Produkttyp) (also 1 Produkttyp = 1 Spalte, ich glaube das ist dann die spaltenweise Datenspeicherung ähnlich SAPs HANA) und nur die Referenzen (also bspw. Ausführung) als Datensatz betrachte, ist es eine 1:N., da ich jede Ausführung nur 1 Mal habe, und jede Spalte ist ein ProduktTyp.


Wobei mir gerade eine Idee kommt: Man könnte doch in den Referenztabellen Spalten für die jeweiligen Produkttypen definieren und diese zusätzlichen Spalten durch das Programm erzeugen bzw. löschen lassen.
 
Also von dynamischen Spalten würde ich dringenst abraten, das wird in vielen Hinsichten ein Albtraum.
zB.
a) Je nach Situation im Programm ist eine "select * from"-Abfrage,
ohne bestimmte Spaltennamen anzugeben, ein Problem.
b) Irgendwelche Absicherungen gegen gleichzeitiges Überschreiben, Transaktionen usw.,
kann man auf der Tabellenstrukturebene vergessen.
c) Normal sehr einfache Abfragen wie "alle Ausführungen für Typ x"
(wenn die Typen in Spalten der Ausführungstabelle kommen) werden sehr langwierig
d) ...
 
nach vielem Hin und Her werden wir, so wie ihr vorgeschlagen habt, einfach eine weitere Typiserung einbauen. Sprich wir werden eine Beziehung einbauen, welche Daten wo ausgewählt werden können. Die eigentlichen Daten werden dann in einer weiteren Beziehung gespeichert.

Vielen Dank für Tipps und Hilfe.


btw: wo kann man eigentlich ein Thema als erledigt markieren?
 

Neue Beiträge

Zurück