Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Gutes Datenbankdesign, variable Anzahl von Attributen

Die Optionen 1, 2 und 3 haben einen sehr schwerwiegenden Fehler gemeinsam:Sie müssen das zugrunde liegende Tabellenschema ändern, wenn sich jemand ein neues Attribut ausdenkt. Im Fall von Option 1 wird das Problem durch die Möglichkeit verschärft, dass ein neuer Gerätetyp eingeführt wird. Wie sicher sind Sie, dass der Satz von Attributen für alle Zeiten feststeht? Wie gerne nehmen Sie Ausfälle in Kauf oder sagen dem Kunden, dass Sie kein neues Attribut haben können?

Wenn Sie sehr wahrscheinlich Abfragen nach allgemeinen Attributen durchführen, könnten Sie eine Mischung aus 3 und 4 ausprobieren, wobei ein Strich von 2 in die Aufteilung nach Attributtyp und nicht nach Gerätetyp geworfen wird, was viel volatiler erscheint. Option 4 ist, wenn ich das richtig verstehe, eine Normalformversion von Option 1, die alle inhärenten Probleme (Spärlichkeit und Sprödigkeit) löst.

INVENTORY( id*, model, manufacturer, serial )
ATTRIBUTE( id*, name, type, description )
INVENTORY_FACT_STRING( inv_id*, attr_id*, value )
INVENTORY_FACT_NUMBER( inv_id*, attr_id*, value )
INVENTORY_FACT_LIST_STRING( inv_id*, attr_id*, ordinal*, value )

usw.