7

Ich arbeite an einem Projekt. Es ist hauptsächlich zu Lernzwecken, ich finde eigentlich, ein kompliziertes Projekt zu versuchen, ist der beste Weg, eine Sprache zu lernen, nachdem man die Grundlagen verstanden hat. Database Design ist kein starker Punkt, ich begann zu lesen, aber seine frühen Tage und ich lerne immer noch.Datenbankstruktur mit dynamischen Feldern

Hier ist mein Alpha-Schema, ich bin wirklich an dem Punkt, wo ich versuche nur alles zu notieren, was ich denken kann und sehen, wenn irgendwelche Probleme herausspringen. http://diagrams.seaquail.net/Diagram.aspx?ID=10094#

Einige meiner Bedenken würde Ich mag Feedback auf:

Hinweis für den Kern wie Bereich beispielsweise Attribute, lässt der Einfachheit halber sagen, dass die Bereiche sind Küche, Schlafzimmer, Garten, Bad und Wohnzimmer. Für einen anderen Kunden, der Homepage, Kontaktseite, About_us, Splash-Screen sein könnte. Es könnte 2 Bereiche und es könnte 100 sein, es gibt keine Notwendigkeit, es zu begrenzen.

Ich erstellte separate Tabellen für die Standardeinstellungen und jeder ist mit einem Fehler verknüpft. Später kam ich auf das Problem der benutzerdefinierten Felder, wenn jemand zum Beispiel möchte, um zu markieren, welches Thema der Fehler betrifft, haben wir das nicht, es gibt wahrscheinlich 100 andere Dinge, also wollte ich zu einem Kernsatz von Attributen und den benutzerdefinierten Feldern bleiben gib den Menschen Flexibilität.

Jedoch, als ich zu den kundenspezifischen Feldern kam, wusste ich, dass ich ein Problem hatte, ich kann eine Tabelle für jedes kundenspezifische Feld nicht schaffen, also benutzte ich stattdessen 2 Tabellen. benutzerdefinierte Felder und custom_field_values. Die Idee ist, würde jedes Feld, einschließlich den Standardwerte in dieser Tabelle gespeichert werden, und jeder würde den Wertetabelle verknüpft werden, die nur so etwas wie diese

custom_fields table 
id   project_id  name 
01   1     area(default) 
12   2     rooms(custom) 
13   4     website(custom) 

custom_field_values table 
id   area   project_id sort_number 
667   area1   1    1 
668   area2   1    2 
669   area3   1    3 
670   area4   1    4 
671   bedroom  2    1 
672   bathroom  2    2 
673   garden   2    3 
674   livingroom  2    4 
675   homepage  4    1 
676   about_us  4    2 
677   contact  4    3 
678   splash page 4    4 
haben würden Sieht das eine effiziente Art und Weise dynamische Felder wie das zu handhaben oder Gibt es andere Alternativen?

Die Standardwerte sind hart codiert, so dass Sie sie entweder verwenden oder durch eigene ersetzen können oder ich könnte eine andere Tabelle erstellen, damit Benutzer den Namen der Standardwerte bearbeiten können, die mit ihrem Projekt verknüpft sind. Jede Rückmeldung ist willkommen und wenn es etwas sehr Offensichtliches mit Fragen in der Regelung gibt, zögern Sie nicht zu kritisieren.

+0

Ugh EAV. Ich würde mir eine NoSql-Alternative ansehen, wenn ich du wäre. –

Antwort

16

Sie haben ein altes Antipattern namens Entity-Attribute-Value neu erfunden. Die Idee von benutzerdefinierten Feldern in einer Tabelle ist wirklich logisch mit einer relationalen Datenbank nicht kompatibel. A relation hat eine feste Anzahl von Feldern.

Aber obwohl es nicht richtig relational ist, müssen wir es immer noch manchmal tun.

Es gibt ein paar Methoden, um benutzerdefinierte Felder in SQL nachzuahmen, obwohl die meisten von ihnen Regeln der Normalisierung brechen. Für einige Beispiele:

+0

Danke Bill, würdest du ein Buch oder eine Ressource empfehlen, die anhand von Beispielen erklärt, wie ich mein Design in Class Inheritance umwandeln kann, ich verstehe nicht, was es ist oder wie es mit MySQL implementiert wird, aber ich beginne es jetzt zu lesen vorgeschlagen, dass als bevorzugte Option in einem der Beiträge ich verlinkt, wenn es eine Online-Ressource oder ein Buch, das dies für einen Neuling erklärt, dann werde ich es glücklich kaufen, bis jetzt im kämpfen, um gute Erklärungen oder Beispiele zu finden. – user1547410

+0

[Muster der Enterprise Application Architecture] (http://www.martinfowler.com/books/eaa.html) von Martin Fowler ist das beste Buch für Klassenvererbung und viele andere Muster, die Sie kennen sollten. –

+0

danke, es scheint, je mehr ich es ansehe, je mehr meine Struktur zu einer Nosql-Datenbank geeignet ist, ich habe es vorher nicht benutzt, aber es scheint die logischere Wahl zu sein, niemand ist anderer Meinung? – user1547410