2010-12-06 5 views
2

DB Welt ist nicht mein, so vielleicht die Frage trivial istOptional Struktur SQL

Stellen Sie sich eine DB entwerfen, die Daten aus verschiedenen Arten von Gegenständen zu speichern (wie Datentypen)

ich keine Ahnung, wie ich tun soll es, aber das ist, wie ich es mache

id | quantity | price ... Kind | ID_k_foreing | 

dann für jede Art von Gegenständen mit Eigenschaften eine Tabelle

so dass ich von jeder Art über die Software wäre vergleichen könnte die Art und dann machen die in den entsprechenden Tabellen-Joins

wie dieser Pseudo-Code

switch(kind) 
{ 
case chess_game: 
     the join is made with a table like this: 
     id_k| material | length | weigth .. 
case car_toy: 
     the join is made with a table like this: 
     id_k| color | velocity | remote_control ... 
case doll: 
     the join is made with a table like this: 
     id_k| name | height | clothes .. 

... 

} 

Es gibt einig standar Weg, um dieses „Datentyp“ Problem in der Struktur ohne Zugabe von tricky Software-Funktionen zu lösen?

dank

Antwort

4

Sie können einen Blick auf diese question nehmen wollen.

Bill Karwins answer bricht es auf diese Weise.

Sie haben mindestens diese fünf Optionen für die Typhierarchie Modellierung Sie beschreiben:

Single Table Vererbung: eine Tabelle für alle Produkttypen, mit genug Spalten speichern alle Attribute aller Typen . Dies bedeutet eine Menge von Spalten, die meisten von denen sind NULL auf einer gegebenen Zeile.

Class Table Inheritance: eine Tabelle für Produkte, die gemeinsame Attribute zu alle Produkttypen speichern. Dann eine Tabelle pro Produkttyp, die für diesen Produkttyp spezifische Attribute speichert.

Concrete Table Inheritance: keine Tabelle für allgemeine Produktattribute. Stattdessen eine Tabelle pro Produkttyp, , die die beiden gemeinsamen Attribute und produktspezifische Attribute speichert.

Serialized LOB: Eine Tabelle für Produkte, gemeinsame Attribute zu alle Produkttypen speichern. Eine zusätzliche Spalte speichert ein BLOB von semi-strukturierten Daten, in XML, YAML, JSON oder einem anderen Format. Mit diesem BLOB können Sie die spezifischen Attribute für jeden Produkttyp speichern. Sie können die ausgefallenen Design Muster verwenden, um dies zu beschreiben, wie Facade und Memento. Aber unabhängig davon haben Sie einen Blob von Attributen, die nicht leicht in SQL abgefragt werden können; Sie haben , um den ganzen Blob zurück zu der Anwendung zu holen und es dort heraus zu sortieren.

Entity-Attribute-Value: Eine Tabelle für Produkte, und eine Tabelle, die Attribute Reihen, statt Spalten schwenkt. EAV ist kein gültiges Design in Bezug auf die relationalen Paradigma, aber viele Leute verwenden es sowieso. Dies ist das "Eigenschaften Muster", das in einer anderen Antwort erwähnt wird. Siehe andere Fragen mit dem Eav-Tag auf StackOverflow für einige der Fallstricke.

Sie müssen herausfinden, welche für Sie arbeitet.