[解決済み] データベースで効果的に継承をモデル化するには?
2022-04-26 02:23:54
質問
データベースで継承をモデル化するためのベストプラクティスは何ですか?
トレードオフ(問合せ可能性など)とは?
(SQL Server と .NET に最も興味がありますが、他のプラットフォームがこの問題にどのように対処しているかも理解したいです)。
どのように解決するのですか?
データベースで継承をモデル化するには、いくつかの方法があります。どれを選ぶかは、あなたのニーズ次第です。ここでは、いくつかの選択肢を紹介します。
テーブル・パー・タイプ(TPT)
各クラスは独自のテーブルを持つ。ベースクラスはすべてのベースクラスの要素を持ち、そこから派生する各クラスは、ベースクラスのテーブルに対する外部キーでもある主キーを持つ独自のテーブルを持ちます。
だから例えば
class Person {
public int ID;
public string FirstName;
public string LastName;
}
class Employee : Person {
public DateTime StartDate;
}
のようなテーブルになります。
table Person
------------
int id (PK)
string firstname
string lastname
table Employee
--------------
int id (PK, FK)
datetime startdate
テーブル・パー・ヒエラルキー(TPH)
すべての継承階層を表す1つのテーブルがあり、いくつかのカラムは疎になる可能性がある。そのため、いくつかのカラムは空白となる。
上記のクラスがあると、このようなテーブルになります。
table Person
------------
int id (PK)
int rowtype (0 = "Person", 1 = "Employee")
string firstname
string lastname
datetime startdate
行タイプ 0 (Person) の行では、開始日は常に null になります。
テーブル・パー・コンクリート(TPC)
各クラスは、他のテーブルを一切参照しない、それ自身の完全なテーブルを持つ。
上記のクラスがある場合、以下のようなテーブルになります。
table Person
------------
int id (PK)
string firstname
string lastname
table Employee
--------------
int id (PK)
string firstname
string lastname
datetime startdate
関連
-
[解決済み] 権限 '*' を持つ SSL/TLS の安全なチャネルを確立できませんでした。
-
[解決済み] Powershell v3 Invoke-WebRequest HTTPSエラー
-
[解決済み] enumを列挙するには
-
[解決済み] SQL ServerでSELECTからUPDATEする方法とは?
-
[解決済み] なぜList<T>を継承しないのですか?
-
[解決済み] データベース内の全テーブルのサイズを取得する
-
[解決済み] SQL Serverで結果をページ分割する最も良い方法は何ですか?
-
[解決済み] SQL Serverでは、MONEYとDECIMAL(x,y)のどちらをデータ型として選択すべきでしょうか?
-
[解決済み】マルチインデックスとマルチカラムインデックスの比較
-
[解決済み】データベースで継承を表現するには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】プラットフォームが同じでも「不正なフォーマットでプログラムを読み込もうとしました。
-
[解決済み】警告。同じ依存アセンブリの異なるバージョン間で競合が見つかりました。
-
[解決済み] <Database> コンテキストを支えるモデルが、データベース作成後に変更されました。
-
[解決済み] Marginのプロパティ順
-
[解決済み] Html.BeginForm()にCSSクラスを追加する。
-
[解決済み] フレームワークとアーキテクチャの違いは何ですか?[クローズド]
-
[解決済み] Windowsイベントログで参照される「フレームワークのバージョン」とは何ですか?
-
[解決済み] .NET Coreと.NET Standard Class Libraryのプロジェクトタイプの違いは何ですか?
-
[解決済み] WPFのStaticResourceとDynamicResourceの違いは何ですか?
-
[解決済み】データベースで継承を表現するには?