Vererbung des Entity Frameworks: TPT, TPH oder keine?

entity-framework inheritance

Frage

Ich lese gerade über die Möglichkeit, Vererbung mit Entity Framework zu verwenden. Manchmal verwende ich einen Ansatz, um Datensätze einzugeben, und bin mir nicht sicher, ob ich TPT oder TPH oder keine verwenden würde.

Zum Beispiel ... Ich habe einen E-Commerce-Shop, der die Versand-, Rechnungs- und Lieferadresse hinzufügt

Ich habe eine Adressentabelle:

RecordID
AddressTypeID
Street
ZipCode
City
Country

und eine Tabelle AddressType

RecordID
AddressTypeDescription

Das Tischdesign unterscheidet sich vom allgemeinen Design, wenn die Leute TPT oder TPH vorführen.

Ich hoffe es macht Sinn ...

Danke für jede Hilfe ...

Akzeptierte Antwort

Sie sollten sich meine EF Tips Series ansehen .

Die so genannte " Wie wählt man eine Vererbungsstrategie" sollte Ihnen mehr Einblick geben

Hoffe das hilft

Alex


Beliebte Antwort

Bei der Überlegung, wie Vererbung in der Datenbank dargestellt werden soll, müssen Sie einige Punkte berücksichtigen.

Wenn Sie über viele verschiedene Unterklassen verfügen, können Sie viele zusätzliche Verknüpfungen in Abfragen mit komplexeren Typen verwenden, die die Leistung beeinträchtigen können. Ein großer Vorteil von TPH ist, dass Sie eine Tabelle für alle Typen in der Hierarchie abfragen. Dies ist ein Segen für die Leistung, insbesondere für größere Hierarchien. Aus diesem Grund tendiere ich dazu, diesen Ansatz in den meisten Szenarien zu bevorzugen

TPH bedeutet jedoch, dass Sie keine NOT NULL Felder für Untertypen mehr haben können, da alle Felder für alle Typen in einer einzigen Tabelle vorhanden sind. Dadurch wird die Verantwortung für die Datenintegrität in Ihre Anwendung verschoben. Obwohl dies in der Praxis schrecklich klingen mag, habe ich dies nicht als zu große Einschränkung empfunden.

Ich würde jedoch gerne TPT verwenden, wenn es für jeden Typ viele Felder gibt und die Anzahl der Typen in der Hierarchie wahrscheinlich gering ist. Dies bedeutet, dass die Leistung bei den Joins weniger ein Problem war und Sie besser werden Datenintegrität.

Beachten Sie, dass einer der Vorteile von EF und anderen ORMs darin besteht, dass Sie Ihre Meinung ändern können, ohne Ihre Anwendung zu beeinträchtigen, sodass die Entscheidung nicht vollständig in Stein gemeißelt werden muss.

In Ihrem Beispiel scheint es keine Vererbungsbeziehung zu haben, es sieht vom Adresstyp bis zu den Adressen wie eine Eins zu viele aus

Dies würde zwischen Ihren Klassen etwa wie folgt dargestellt:

Address.AddressType
AddressType.Addresses


Related

Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow