Database_Foreignkey

3412 ワード

Foreign Key


Foreign Keyコンセプト


  • 外部キー

  • リレーショナル・データベースの1つのテーブルのフィールドまたは別のテーブルのローを識別するキー.

  • 参照されるテーブルでは、属性は参照されるテーブルのプライマリ・キー(PK)に対応します.

  • 参照テーブルの外部キーは、参照されるテーブルの行に対応します.
  • したがって参照できないテーブルに参照される存在しない行
  • を参照する.

  • テーブル内の複数行参照を参照できるテーブル内の同じ行

  • 参照されるモデルでは、外部キーは参照されるモデルのPKを指す.
  • Foreign Key特性

  • キーを使用して、親テーブルの一意の値(整合性)
  • を参照します.
  • 外部キーの値は親テーブルのプライマリ・キーとは限りませんが、一意の値
  • でなければなりません.
  • 参照整合性
  • データベース関係モデルに関連する2つのテーブル間の一貫性
  • 外部キーを宣言するテーブルの外部キー属性の値は、テーブルの親テーブルのプライマリ・キー値として
  • 存在する必要があります.

    Foreign Key field

  • A many-to-one relationsship
  • 2個の位置パラメータが必要です
  • 参照モデルクラス
  • on deleteオプション
  • migrate操作の場合、フィールド名にidを追加することによりデータベース列名
  • を作成する.
    自分で自分を参照する場合もあります

    on_delete


    外部キーリファレンスのオブジェクトが消えたときに、外部キーリファレンスのオブジェクトをどのように処理するかを定義します.
  • 投稿にコメントがあります.投稿が削除された場合、投稿をどのように処理しますか?
  • 非常に重要な
  • データ整合性設定
  • on deleteオプションの使用可能な値
  • CASCADE
  • PROTECT
  • SET_NULL
  • SET_DEFAULT
  • SET()
  • DO_NOTHING
  • RESTRICT
  • class Comment(models.Model) :
        #게시글 참조 on_delete를 이용해 게시글이 삭제되면 댓글도 자동 삭제되게 설정
        # 참조하는 모델과 1:N 관계일 때, 소문자 단수형으로 사용
        article = models.ForeignKey(Article, on_delete=models.CASCADE)
        content = models.CharField(max_length=200)
        created_at = models.DateTimeField(auto_now_add=True)
        updated_at = models.DateTimeField(auto_now = True)
    
        def __str__(self) :
            return self.content

    データ整合性

  • は、データの正確性と一貫性を維持し、保証することを意味し、
  • は、データベースまたはRDBMSシステムの重要な機能である.
  • 完全性制限のタイプ
  • オブジェクト整合性
  • PKの概念と関連
  • データベースのForeignKey表示

  • ForeignKeyインスタンスをabcdとして作成すると、abcd idの
  • として作成される.
  • ただし、クラス名の小文字(単数)を使用して、明確なモデル関係(1:N)
  • を作成することを推奨します.