Entity Frameworkの継承:TPT、TPH、またはなし

entity-framework inheritance

質問

私は現在、Entity Frameworkで継承を使うことの可能性について読んでいます。時々私はデータレコードをタイプするためにアプローチを使用します、そして私が私がTPTまたはTPHを使用するかどうかを確かめません...

たとえば、配送先、請求先、配送先を追加するeコマースショップがあります。

アドレステーブルがあります。

RecordID
AddressTypeID
Street
ZipCode
City
Country

AddressTypeテーブル

RecordID
AddressTypeDescription

TPTやTPHを披露するときのテーブルデザインは、一般的なデザインとは異なります。

それが理にかなっていることを願っています...

助けてくれてありがとう...

受け入れられた回答

私のEF Tips Seriesをチェックしてください。

継承戦略を選択する方法と呼ばれるものはあなたにもう少し洞察力を与えるべきです

お役に立てれば

アレックス


人気のある回答

データベース内で継承を表現する方法を検討する際には、いくつか検討する必要があります。

さまざまなサブクラスがある場合は、パフォーマンスが低下する可能性があるこれらのより複雑な型を含むクエリで、多くの余分な結合が発生する可能性があります。 TPHの大きな利点の1つは、階層内のすべての型について1つのテーブルを照会することです。これは、特に大規模な階層の場合、パフォーマンスの向上につながります。このため、私はほとんどのシナリオでそのアプローチを支持する傾向があります。

ただし、TPHは、すべての型のすべてのフィールドが1つのテーブル内にあるため、サブタイプのNOT NULLフィールドを持つことができなくなり、データの整合性に対する責任がアプリケーションに向かって進むことを意味します。これは実際には恐ろしいように思えるかもしれませんが、私はこれがあまりにも大きな制限であるとは思っていません。

ただし、各型に多くのフィールドがあり、階層内の型の数が少ないと思われる場合はTPTを使用する傾向があります。つまり、結合に関するパフォーマンスの問題はそれほど多くなかったため、パフォーマンスが向上します。データの整合性。

EFや他のORMの利点の1つは、アプリケーションに影響を与えずに考えを変えることができるため、決定を完全に刻む必要がないことです。

あなたの例では、それは継承関係を持っているようには見えません、それはアドレスタイプからアドレスまで1対多のように見えます

これはクラスの間で次のように表現されます。

Address.AddressType
AddressType.Addresses


Related

ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ