2016-03-31 2 views
0

Ich versuche, eine Datenbank für meine App und webservice zu entwerfen, läßt die Tabelle sagt für Anzeigen von Eigenschaften so etwas wie diese:Wie wird für die Datenbank entworfen, in der die Spaltennummer mit der Zeit zunehmen kann?

survey

So View hat prop_id, x, y, Breite, Höhe txt_color, bg_color,

Und nach einer Weile ich brauche eine neue Spalte in dieser Tabelle hinzufügen:

TEXT_SIZE, has_shadow ... et c

Der Typ der Eigenschaft ist dynamisch und die Anzahl der Eigenschaften ist ebenfalls dynamisch.

Wie können wir solche erweiterbaren Datenbanken entwerfen?

+1

Beste Wette ist, eine Tabelle mit ID, Prop, Wert zu erstellen und fügen Sie einfach neue Zeile für jede neue Eigenschaft, die Sie hinzufügen. Dann können Sie das Ergebnis schwenken, wenn Sie wollen – JamieD77

+0

Duplizieren? http://stackoverflow.com/questions/6768074/extendable-database-schema-how-to-store-the-extendable-attribute-values?rq=1 –

Antwort

2

Wenn Sie eine neue Eigenschaft benötigen, fügen Sie Ihrer Tabelle eine Spalte hinzu.

Ich bin mir sicher, dass die Leute vorschlagen werden, dass Sie versuchen, das EAV (Entity-Attribute-Value) -Modell für diese Art von Datenbankänderungen zu verwenden, aber das ist ein großer Fehler, IMO. Es gibt sehr, sehr einige Fälle, in denen das Anti-Muster aufgerufen wird, und das ist keiner von ihnen.

Wenn Ihre Datenbank nun "text_size" protokollieren muss, dann wird Ihre Anwendung vermutlich Änderungen erfordern, die sich auf diese Textgröße beziehen. Sie müssen Ihre Anwendung und/oder Datenbank ändern, so wie sie ist, also kaufen Sie nichts (außer Kopfschmerzen), indem Sie das EAV-Modell verwenden.

Wenn Sie Google EAV dann finden Sie eine Menge mehr Informationen darüber und warum es eine schlechte Idee ist, aber kurz gesagt macht es Abfrage Ihrer Datenbank schwieriger und weniger leistungsfähig, und macht die Wartung schwieriger, nicht einfacher.

+0

Also jedes Mal, wenn neue Attribut kam irgendwie, ich sollte neue Spalte hinzufügen zur Datenbank? Ist es nicht auch teure Operationen? – MBH

+2

Sie müssten definieren, "teuer". Teuer in welcher Weise? Das Hinzufügen einer Spalte zu einer Tabelle ist einfach eine Metadatenänderung, die fast sofort erfolgt. Wie oft erwartest du neue Attribute hinzuzufügen? Wenn Sie ein Attribut hinzufügen, müssen Sie nicht bereits sicherstellen, dass Ihre Anwendung es aufnehmen kann? –

+0

Ich dachte, dass das Hinzufügen von Attribut teuer wäre, da es hinzugefügt und als 0 oder Standardwert für die gesamte Tabelle eingefügt wird. Also habe ich die Idee beim Schreiben der App, der Kunde begann neue Sachen hinzuzufügen, und ich war wie, wenn er fragte, nachdem wir veröffentlichen ... das ist, warum ich diese Frage gestellt – MBH

Verwandte Themen