Frage

Eine Antwort auf eine Frage von dir auf DB-Design etwas einzelne Tabelle Vererbung genannt vorgeschlagen. Ich habe auf, dass ein wenig die Suche gemacht, aber ich kann nicht so viel klare Informationen über sie zu finden scheinen.

Im Grunde, was ich zu verstehen scheinen davon ist, dass Sie die Felder in ihm und auch ein Typfeld eine große Tabelle mit allen haben - und dann ORM-Schicht verwendet das Typfeld Sie verschiedene Objektansichten zu geben. Ist das richtig?

Noch wichtiger ist, einzelne Tabelle Vererbung eine ‚zugelassen‘ Datenbank-Design-Technik? Damit meine ich, ist es sinnvoll ', es zu benutzen? Ist es auch sicher, es zu benutzen, oder es verursacht Probleme?

Die andere Frage ist, wie gut diese in Schienen funktioniert? Ich habe ein paar Verweise auf sie aus Schienen vorhanden - aber ist es Probleme verursachen, indem sie die Dinge, die nicht-konventionelle Art und Weise zu tun

Jede Hilfe sehr geschätzt.

War es hilfreich?

Lösung

Ist es eine gute Idee? Es hängt davon ab, ob. Es bricht Normalisierungs, dass eine Tabelle nicht über einen einzigen Zweck. Was passiert, wenn Sie die Basisklasse für die n-te Zeit verlängern? Sie müssen Spalten der Tabelle hinzuzufügen. Die meisten modernen DBs haben kein Problem damit, wie Sie die Tabelle ändern können, aber was ist das Refactoring und eine Klasse zu entfernen. Jetzt haben Sie die Spalten, die keinen Zweck haben.

Eine Daumenregel - wenn die meisten Designs ausgearbeitet wurde, ist es wahrscheinlich sicher zu bedienen. Wenn das Design häufig verändert - haben Sie andere Fragen, und Sie müssen Ihre Anwendungsfälle / Anforderungen der Nutzer sperren. (Ja, nicht wirklich XP freundlich)

Ich weiß nicht, über die Rails-Effekte.

Andere Tipps

STI ist ein Weg, mit einer Abweichung von dem Umgang zwischen objekt- und datenbankorientiertes Denken. Es ermöglicht eine angemessene Darstellung der Informationen in der Datenbank und einer anderen Darstellung innerhalb des Objektmodells.

Zum Beispiel habe ich eine Anwendung, bei jedem meiner Produkten einer oder mehr Gebühren, die jeweils etwas anders berechnet. In meinem Objektmodell möchte ich Subklassen einer Gebührenklasse haben, von denen jeder weiß, wie man sich selbst zu berechnen. Ich will nicht wirklich obwohl eine Tabelle pro Gebühr Typ haben: so ich schaffen Fee als Basisklasse und Gebühren wie die Tabelle, die die Vereinigung aller Felder enthält über alle Untertypen benötigt, sowie ein „Typ“ Spalte, dessen Wert entspricht den Namen der betreffenden Teilklasse. Activenimmt die Sanitär danach.

Kurz gesagt, Single Table Inheritance (STI) ist ein Design-Muster, das eine Abbildung von OOP Vererbungsbeziehungen zu der Datenbank ermöglicht. Wenn Sie Subklassen von Ihren Activemodellobjekten definieren, dann sollten Sie STI betrachten.

STI ist (ursprünglich?) Dokumentiert in Martin Fowler 'Patterns of Enterprise Application Architecture' Buch und wird auch in DHH kanonischen Rails Buch 'Agile Web Development mit Rails' beschrieben (Abschnitt 18.4, glaube ich.) Ich verweise Sie auf diese Bücher, weil sie bieten eine viel bessere Erklärung als ich in diesem Raum zu tun hoffen konnte.

Ich bin nicht einverstanden stark mit der Stimmung bei www.matthewpaulmoore.com ausgedrückt (verbunden durch robintw in diesem Thread), dass STI ist von Natur aus eine schlechte Sache. Dies scheint eine etwas naive Ansicht zu sein, dass die Verwendung von OOP Vererbung diskontiert. Ich habe STI verwendet, um einige elegante Lösungen in Rails zu erstellen, aber Sie können jedes Design-Muster missbrauchen, nehme ich an.

Referenz . Es ermöglicht eine einzelne Tabelle, mehrere Objekte zu speichern, die eine gemeinsame Basisklasse haben.

Ruby on Rails verwendet eine Bibliothek mit dem Namen Active Record . Dies ist ein gemeinsamer Ruby-Framework, das STI unterstützt.

Ich kann nur von der (neu) sprechen Perspektive ADO Entity Framework, die Tabelle pro Typ enthält (TPT) Funktionalität.

Hier ist ein gute Serie von Blog-Posts der Kernkonzepte (mit dem Entity Framework) einzuführen, und es gibt ein MSDN-Papier darauf auch hier .

Es scheint auch einige Hinweise zu sein, wenn nHibernate für TPT verwendet wird, es sich befindet Tabelle pro Typ Vererbung in SQL Server . Dies scheint das Konzept eine ziemlich gute Zusammenfassung und Einführung zu haben.

Ich bin mir nicht sicher, welche Auswirkungen es auf Rails hat.

Ich habe gerade gesehen http: //www.matthewpaulmoore.com/articles/1276-ruby-on-rails-code-quality-checklist#sti , die seine schlechte Idee schlägt.

Generell finde ich es nützlich, aber Ich habe einige Fehler aufgetreten

Das Beispiel in dieser Verbindung kann ein brauchbares Bild davon, wie Sie es verwenden können.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top