sql >> データベース >  >> RDS >> Sqlserver

データベースで継承を効果的にモデル化するにはどうすればよいですか?

    データベースで継承をモデル化する方法はいくつかあります。どちらを選択するかは、ニーズによって異なります。ここにいくつかのオプションがあります:

    タイプごとのテーブル(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
    

    Table-Per-Hierarchy(TPH)

    すべての継承階層を表す単一のテーブルがあります。これは、いくつかの列がおそらくまばらであることを意味します。これがどのタイプの行であるかをシステムに通知する識別子列が追加されます。

    上記のクラスを考えると、次のテーブルになります。

    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
    


    1. ID列を含むSqlBulkCopy挿入

    2. SQL Server 2008:ユーザー名に特権を付与するにはどうすればよいですか?

    3. ストアドプロシージャへのパラメータとしてのデータテーブルの受け渡し

    4. SQLite Rtrim()のしくみ