2012-03-27 11 views
0

Ich habe ein Szenario, in dem ich verschiedene Parameter mit Werten in der Datenbank speichern. Parameter können vieler Art sein. das heißtKomplexe Datenbank Tabellenentwurf

String, Integer, Mehrwertige

Wie man viele Beziehung ist so ich es zwei Tabellen erstellen.

parameter 
--------- 
id | name 

parameter_value 
--------------- 
id | parameter_id(F.K) | value 

Jetzt ein weiterer Parametertyp zu den Anforderungen hinzugefügt. d. h. "Karte". Ein Parameter kann also eine Karte sein. Karte kann andere Parameter haben. Ich habe Probleme beim Entwerfen von Datenbanktabellen gemäß dieser neuen Anforderung. Muss ich neue Tabellen erstellen oder bestehende ändern? Verwenden von IBM DB2.

+0

möglich duplikat von [Datenbank EAV Pro/Contra und Alternativen] (http://stackoverflow.com/questions/2224234/database-eav-pros-cons-and-alternatives) – Pondlife

+0

Sie sollten wahrscheinlich erwähnen, welche Datenbank-Plattform Sie ' wiederverwenden, da verschiedene Systeme unterschiedliche Funktionen haben können, die hier gelten. Aber im Wesentlichen fragen Sie sich, wie ein EAV-Modell implementiert werden soll. – Pondlife

+0

Ich kenne das EAV-Modell nicht und möchte das nicht implementieren. Ich möchte nur eine einfache Tabelle verwenden. Mit DB2. –

Antwort

0

Sie sagten "Parameter können vieler Typen sein. D. H. String, Integer, Multivalue". Aber Tabellen wie diese

parameter_value 
--------------- 
id | parameter_id | value 

speichern kann nur eine Art, wahrscheinlich eine Art von varchar (n), wobei ‚n‘ könnte wirklich groß sein. Parameter, die eigentlich ganze Zahlen sein sollen, können also "wibble" sein.

Auch "Multivalue" ist historisch kein relationaler oder SQL-Datentyp. (Das ändert sich. Aber Veränderung ist langsam.) Einige SQL-Plattformen unterstützen einige Arten von mehreren Werten, aber die Unterstützung ist bei weitem nicht universell. PostgreSQL, um eine, die ich ziemlich vertraut bin, zu wählen, unterstützt Arrays, JSON (ich denke, in der neuesten Version), und Schlüssel/Wert-Paare (hstore-Modul). Einer davon könnte dir helfen. Ich bin mir nicht sicher.