2

SQL (MySQL) および Rails とのテーブル関連付けを問題なく使用してきましたが、外部キー制約を指定する必要はありませんでした。

belongs_to テーブルに table_id 列を追加するだけで、すべてうまくいきます。

それで、私は何が欠けていますか?MySQL やその他の RDBMS で外部キー句を使用するポイントは何ですか?

ありがとう。

4

5 に答える 5

2

外部キーは、2 つのテーブル間の参照制約です

外部キー制約が存在する理由は、参照される行が存在することを保証するためです。

外部キーは、別の (参照先または親) テーブル内の列または列のセットを参照する、1 つの (参照元または子) テーブル内の列または列のセットを識別します。

  • テーブルを自動的にクリーンアップして、「カスケード削除時」の素晴らしい動作を得ることができます

ここにリストされている外部キーを使用する理由はたくさんあります:なぜ外部キーを使用する必要があるのか

于 2013-01-01T05:46:57.470 に答える
1

外部キーまたは参照制約の基本的な考え方は、データベースが明らかに無効なデータを格納することを許可してはならないということですこれは、 ACID ルールの 1 つである、データ整合性のコア コンポーネントです。

1 つのアカウントに複数の電話番号を関連付けることができるとデータ モデルが示している場合は、有効なアカウント番号を要求するように phone テーブルを定義できます。したがって、有効なアカウント番号がないと phone テーブルに行を挿入できず、最初に電話番号を削除しないとアカウントを削除できないため、孤立した電話レコードを保存することはできません。フィールドが生年月日の場合、日付が明日の日付より前であるという制約を適用できます。フィールドが高さの場合、距離が 30 ~ 4000 cm になるように強制できます。これは、アプリケーションが無効なデータをデータベースに格納することは不可能であることを意味します。

「えっと、なんでそんなこと全部自分のアプリケーションに書き込めるの?」あなたが尋ねる。単一アプリケーション データベースの場合は可能です。ただし、ビジネス オペレーションで使用されるデータを格納する重要なデータベースを使用するビジネスでは、データに直接アクセスする必要があります。彼らは、財務や人事からデータをインポートしたり、住所を営業にエクスポートしたり、Active Directory などからインポートしてアプリケーション ユーザー アカウントを作成したりできるようにしたいと考えています。重要なアプリケーションの場合、ユーザーのデータが重要です。それが彼らがアクセスしたいものです。ある時点で、アプリケーション コードを邪魔することなくデータにアクセスしたいと思うようになるでしょう。これが RDMBS の真の力であり、システム統合を可能にします。

ただし、すべてのルールがアプリケーションに格納されている場合、ユーザーはデータベースの操作方法に細心の注意を払う必要があります。アプリケーションが内破しないようにするためです。リレーショナル制約と参照整合性を指定する場合は、他のアプリケーションがデータを使用するすべてのアプリケーションにとって意味のある方法でデータを変更する必要があります。ロジックは、アプリケーションではなくデータ (データが属する場所) に関連付けられています。

MySQL は、参照整合性に関して絶対的なボールであることに注意してください。通常、constraint を使用して日時フィールドに null 日付を挿入しようとすると、今日の日時のような明らかに無効な値を挿入することにより、エラーをスローするのではなく、黙って成功する傾向がありますnot null default null。DBA が MySQL は冗談だと言うのには十分な理由があります。

于 2013-01-01T06:13:04.870 に答える
1

Rails (具体的にはActiveRecord )は、外部キーを自動推測します。

... デフォルトでは、これは「_id」サフィックスが付いた関連付けの名前であると推測されます。

外部キーは参照整合性を強制します。

外部キー:値が別のテーブルの行の少なくとも 1 つの PrimaryKey 値と一致する必要がある、テーブル内の列または列のセット。

以下も参照してください。

于 2013-01-01T05:47:23.050 に答える
0

私が考えることができる外部キーを使用するいくつかの利点:

  • テーブル間でデータの一貫性を保ち、不正なデータが発生するのを防ぎます (たとえば、テーブル A にテーブル B に存在しないものを参照するレコードがいくつかあります)。

  • 私たちのデータベースを文書化するのに役立ちます

  • 一部のフレームワークは、ドメイン モデルを生成するために外部キーに基づいています

于 2013-01-01T06:08:31.083 に答える
0

外部キーは参照整合性を強制します。外部キー制約により、あなたや他のユーザーが誤ってテーブルに誤ったレコードを追加するのを防ぐことができます。外部キーに入力されているデータ (ID) が参照テーブルに存在することを確認します。バグのあるクライアント コードが誤ったデータを挿入しようとすると、外部キー制約の場合に例外が発生します。それ以外の場合、制約がない場合、データベースは一貫性のないデータになります。

于 2013-01-01T05:46:14.240 に答える