Es ist unmöglich zu sagen, ob ein bestimmtes Datenbankdesign schlecht ist, ohne zu wissen, was die Anwendung tut, welche Form die Daten haben, welche Leistungserwartungen sie haben und so weiter. Während im Allgemeinen die Normalisierung (bis zu einem gewissen Grad) als bewährte Methode angesehen wird, ist es aus Performancegründen üblich, Bereiche von Datenbanken zu denormalisieren, sodass gute und schlechte Daten ohne viel mehr Daten zur Diskussion stehen, als die meisten Leute zu Beginn haben.
Fügen Sie die zahlreichen Ansätze hinzu, mit denen Objekte relationalen Zuordnungen zugeordnet werden können, und die Dinge werden noch komplexer, da die "beste" Datenbankstruktur vom spezifischen Objektmodell, der Vererbungsebene usw. abhängt.
Wenn Sie eine Einheitsgröße wählen, erzeugen ORM-Persistenzbibliotheken fast immer eine nicht optimale Datenbankstruktur für eine bestimmte Situation und verwenden einige Dinge, die für eine bestimmte Situation als schlechte Praxis angesehen werden können .
Sie könnten sicherlich einen ORM schreiben, der sich normalisiert, aber Sie würden ziemlich starke Auswirkungen auf die Leistung feststellen, da für jede Einfügung in eine Haupttabelle die verschiedenen Nachschlagetabellen durchsucht werden mussten, um festzustellen, ob Werte vorhanden waren, ob sie ihre Schlüssel erhalten haben und ob sie nicht die entsprechenden Einsätze nicht durchführen.
(Wenn Sie dies von Hand tun, können Sie einen Teil davon abkürzen, da Sie wissen, dass Sie ihnen ein Dropdown-Menü mit nur gültigen Werten angezeigt haben, sodass Sie diese Suchvorgänge nicht ausführen müssen. Sie können einfach den Schlüssel verwenden, wenn er funktioniert Um gültig zu sein, konnte der ORM diese Annahme nicht treffen, da er die Benutzeroberfläche nicht kontrolliert.)
Sie müssen sich jedoch daran erinnern, dass sie nicht darauf abzielen, die Datenbankleistung oder die Datenintegrität zu optimieren, sondern die Entwicklungsgeschwindigkeit zu optimieren . Wenn Ihnen die spezifische Struktur Ihrer Daten wichtig ist, müssen Sie entweder Ihre Objekt- / RDBMS-Zuordnungen von Hand codieren oder zumindest eine detaillierte Bewertung aller verfügbaren Bibliotheken vornehmen und diejenige auswählen, die Ihren Anforderungen am besten entspricht ( falls vorhanden).
Im Wesentlichen kommt es auf die Anforderungen und den Kompromiss zwischen gut strukturierten Daten, Datenbankleistung und Entwicklungsgeschwindigkeit an. Wie bei vielen Kompromissen kann man nicht alle drei auswählen.