0

これは、物事を機能させるための一種の概念実証ドラフト用ですが、完全にくだらないコードは望んでいません。私のデータベースでは、innoDB を使用して真の外部キー関係を取得しようとしましたが、取得できませんでした。

外部キーを使用する代わりに、挿入後に mysql_insert_id() をプルして変数として保存し、その変数を関連テーブルに入れることにしました。

これはひどいですか?すべてがうまく機能しているようで、必要に応じて ID を接続して関連付けることができます。外部キーを使用すると、私の方法よりもどのような利点がありますか (更新/削除のカスケード以外に)?

4

1 に答える 1

0

リレーション (master->detail) を作成するにはmysql_insert_id、自然キーまたはアプリケーションによって生成されたキーを使用して、常に自分でキーを提供する必要があります。あなたのためにそれをFOREIGN KEY機能させるつもりはありません。

FOREIGN KEYは何ですか

  • データの関係/整合性を強化するのに役立ちます (そのため、「詳細」レコードは無効な親を指しません)
  • マスター レコードの削除またはキーの変更を処理します (ON DELETE ...、ON UPDATE ...)。
  • また、「master_id」行の「detail」テーブルにインデックスが作成されていない場合は、そのインデックスも作成されます (OK、なしでも作成できますFOREIGN KEY) 。
  • また、ERMツールがスキーマから関係モデルを再設計できるなど、何らかの文書化の目的もあります(わかりました、この点は少し長いショットです)

制約ステートメントを追加するコストは、FOREIGN KEYその利点に比べてわずかです。

于 2011-09-06T19:50:46.387 に答える