1. はじめに外部キー制約を使用するかどうかという話題は、すでに決まり文句になっています。学校では、教師が教えることのほとんどが、外部キー制約を確立することです。しかし、実際の仕事では、外部キーを使用せず、コード ロジックを通じて外部キーを制御することがよくあります。 Alibaba の JAVA 仕様でも明確に規定されています: [必須] 外部キーとカスケードを使用してはならず、すべての外部キーの概念はアプリケーション層で解決する必要があります。 なぜこのような規制をする必要があるのでしょうか?外部キー制約を使用する必要がありますか?例を挙げて説明しましょう 2. 例これで、データベースに [product と project] という 2 つのテーブルが作成されました。[project] の この制約の存在により、テーブル内のデータ間の関係の整合性が確保されることがわかります。汚れたデータが存在する可能性は低くなります。これは外部キー制約の非常に明白な利点です。 要約すると、外部キー制約には次の利点があります。
しかし、無視できない欠点もあります。 パフォーマンスの問題 [project] と [product] の 2 つのテーブルを作成しました。[project] テーブルには、 このとき、[project] テーブルにデータを挿入するたびに、まず [product] に移動して、対応する関連データがあるかどうかを確認します。プログラムによって制御される場合は、このクエリを省略できます。ただし、外部キー制約が設定されている場合は、クエリは確実に実行されます。これは実際には冗長です。関連フィールドが少ない場合は影響がない可能性がありますが、関連フィールドが増えると、この影響は特に顕著になります。 デッドロック 外部キーによりクエリは他のテーブルに依存するため、InnoDB は親テーブル (または関連テーブル) 内の対応する値をチェックする必要があります。これにより、親テーブルの行もロックされ、トランザクションが完了する前に行が削除されないようにします。これにより、予期しないロック待機やデッドロックが発生する可能性があり、その原因を特定するのは困難です。 シャーディングの難しさ 制約のあるデータベースは、異なるデータベースやテーブルに分割する必要がある場合に特に使いにくくなります。 開発/テスト効率の低下 日常のテストプロセスでは、バグが見つかり、それを再現したりテストを容易にしたりしたいという状況に頻繁に遭遇します。テストを容易にするために、データベース テーブルのデータを直接変更します。 これは標準化されていませんが、実際のところ、効率を大幅に向上させることができます。これは疑いの余地がありません!ただし、このような操作では、実際にはプログラムのバグではないデータによってバグが発生したり、潜在的なバグが発見されなかったりするなどの問題が発生する可能性もあります。 結論現在、多くのインターネット企業、特に大規模な企業では、外部キーを無効にすることが義務付けられています。これはパフォーマンスの問題だけでなく、インターネットビジネスの変化が速いことが主な原因で、間接的にテーブル構造の変化につながります。外部キー制約の存在は予期しない問題を引き起こし、開発効率を低下させる可能性が非常に高くなります。したがって、変更をより適切に受け入れるために、重要でない状況や高い信頼性を必要としないビジネス シナリオでは外部キー制約を使用しないことをお勧めします。 これで、MySQL データベースで外部キー制約を使用する必要があるかどうかに関するこの記事は終了です。MySQL データベースの外部キー制約の詳細については、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: CSS はモバイル互換性の問題を解決するために 0.5px の線を実装します (推奨)
>>: レスポンシブフレームワークのテーブルヘッダーの自動改行問題に対する簡単な解決策
今日、Tomcat サーバーの設定時にちょっとした問題が発生したので、参考までにいくつかご説明したい...
序文: Docker はオープンソースのアプリケーション コンテナ エンジンであり、開発者はこれを使...
1. Reactでクラス宣言する際のヒント 上記のように、Child クラスは class キーワー...
この記事では、MySQL 8.0.11圧縮版のインストールチュートリアルを参考までに紹介します。具体...
目次1. 大文字と小文字の区別を決定するパラメータ2. パラメータ変更に関する注意事項要約: 1. ...
いつものように、今日は非常に実用的な CSS 効果についてお話します。マウスがボタンに移動すると、ド...
学習目標: Windowsシステムを使用してMySQLデータベースをインストールする方法を学びます。...
目次1. グローバルに登録されたコンポーネント2. グローバルカスタム指示vue 、新しいプラグイン...
1. MySQLをインストールする(1)ダウンロードしたMySQLの圧縮ファイルをMySQLをインス...
Nginxの仕組みNginx はコアとモジュールで構成されています。 Nginx 自体は実際にはほと...
導入コンパイル、インストール、問題の解決後、Nginx は正常に動作していますが、現時点では Ngi...
インストール環境: CAT /etc/os-release CentOS システムのバージョン情報を...
<br />このタグを使用すると、画面上に水平線を表示して、ページのさまざまな部分を区切...
結論は幅の%: 包含ブロック(親要素)の幅に基づいて、親の制限を超える幅のパーセンテージを定義します...
ご存知のとおり、私たちが毎日閲覧する Web ページ、Web サイト、または Web ページには独自...