2016-10-09 8 views
0

これを私に説明してください。私たちは外部キーとして従属テーブルの主キーを使用する理由を理解したいEF:1対1の関係にある外部キーですか?

public class Student 
{ 
    public Student() { } 

    public int StudentId { get; set; } 
    public string StudentName { get; set; } 

    public virtual StudentAddress Address { get; set; } 

} 

public class StudentAddress 
{ 
    [ForeignKey("Student")] 
    public int StudentAddressId { get; set; } 

    public string Address1 { get; set; } 
    public string Address2 { get; set; } 
    public string City { get; set; } 
    public int Zipcode { get; set; } 
    public string State { get; set; } 
    public string Country { get; set; } 

    public virtual Student Student { get; set; } 
} 

、なぜ私たちは通常の方法に従わない:この例を見てみましょうを参照する従属テーブルの外部列を追加しますプリンシパルテーブルからのプライマリキー? そして、私たちはここで役割を逆転させることができます。つまり、Studentエンティティの主キーを外部キーとして使用できますか?主なテーブルの主キーを参照 従属テーブルの外部列を追加する:

+0

XとYの間のタイプ1-1の関係は、1対1の関係の定義によって、XIdがXの主キーであり、Yの主キーとYの外部キーであることを意味します。 – Monah

答えて

1

は、なぜ私たちは通常の方法に従わないのですか?

私たちは、このフィールドの同じ値を持つ複数のStudentAddressを持っている可能性があるので関係は、1-n、ない1-1だろうとしなかった場合。プライマリキーを外部キーとして使用することにより、同じ値を持つStudentAddressを複数持つことはできません(プライマリキー違反となります)。 したがって、関係の参照整合性が私たちの仕事を確実にするようにします。

そして、我々はすなわち、外部キーとして学生 エンティティの主キーを使用するために、ここでは役割を逆にすることができますか?

次に、最初にStudentAddressを作成してからStudentを作成する必要があります。 StudentがなくてStudentAddressにすることができます。現時点では、にはStudentAddressがなくてもかまいませんが、それ以外の方法はありません。もっと理にかなっていると思います。 StudentAddressは弱いエンティティであり、対応者Studentが存在しない限り存在しないことを意味します。

テーブル間の関係に関するこれらの概念やその他は、基本的なリレーショナルモデルの本やコースでよく説明されています。詳細を知らなくてもEFコードを実装できますが、いくつかの基本的なルールに従ってデータベースモデルを設計する方法を習得するのに多大な労力を要します。

関連する問題