1. はじめに外部キー制約を使用するかどうかという話題は、すでに決まり文句になっています。学校では、教師が教えることのほとんどが、外部キー制約を確立することです。しかし、実際の仕事では、外部キーを使用せず、コード ロジックを通じて外部キーを制御することがよくあります。 Alibaba の JAVA 仕様でも明確に規定されています: [必須] 外部キーとカスケードを使用してはならず、すべての外部キーの概念はアプリケーション層で解決する必要があります。 なぜこのような規制をする必要があるのでしょうか?外部キー制約を使用する必要がありますか?例を挙げて説明しましょう 2. 例これで、データベースに [product と project] という 2 つのテーブルが作成されました。[project] の この制約の存在により、テーブル内のデータ間の関係の整合性が確保されることがわかります。汚れたデータが存在する可能性は低くなります。これは外部キー制約の非常に明白な利点です。 要約すると、外部キー制約には次の利点があります。
しかし、無視できない欠点もあります。 パフォーマンスの問題 [project] と [product] の 2 つのテーブルを作成しました。[project] テーブルには、 このとき、[project] テーブルにデータを挿入するたびに、まず [product] に移動して、対応する関連データがあるかどうかを確認します。プログラムによって制御される場合は、このクエリを省略できます。ただし、外部キー制約が設定されている場合は、クエリは確実に実行されます。これは実際には冗長です。関連フィールドが少ない場合は影響がない可能性がありますが、関連フィールドが増えると、この影響は特に顕著になります。 デッドロック 外部キーによりクエリは他のテーブルに依存するため、InnoDB は親テーブル (または関連テーブル) 内の対応する値をチェックする必要があります。これにより、親テーブルの行もロックされ、トランザクションが完了する前に行が削除されないようにします。これにより、予期しないロック待機やデッドロックが発生する可能性があり、その原因を特定するのは困難です。 シャーディングの難しさ 制約のあるデータベースは、異なるデータベースやテーブルに分割する必要がある場合に特に使いにくくなります。 開発/テスト効率の低下 日常のテストプロセスでは、バグが見つかり、それを再現したりテストを容易にしたりしたいという状況に頻繁に遭遇します。テストを容易にするために、データベース テーブルのデータを直接変更します。 これは標準化されていませんが、実際のところ、効率を大幅に向上させることができます。これは疑いの余地がありません!ただし、このような操作では、実際にはプログラムのバグではないデータによってバグが発生したり、潜在的なバグが発見されなかったりするなどの問題が発生する可能性もあります。 結論現在、多くのインターネット企業、特に大規模な企業では、外部キーを無効にすることが義務付けられています。これはパフォーマンスの問題だけでなく、インターネットビジネスの変化が速いことが主な原因で、間接的にテーブル構造の変化につながります。外部キー制約の存在は予期しない問題を引き起こし、開発効率を低下させる可能性が非常に高くなります。したがって、変更をより適切に受け入れるために、重要でない状況や高い信頼性を必要としないビジネス シナリオでは外部キー制約を使用しないことをお勧めします。 これで、MySQL データベースで外部キー制約を使用する必要があるかどうかに関するこの記事は終了です。MySQL データベースの外部キー制約の詳細については、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: CSS はモバイル互換性の問題を解決するために 0.5px の線を実装します (推奨)
>>: レスポンシブフレームワークのテーブルヘッダーの自動改行問題に対する簡単な解決策
この記事では、例を使用して MySQL コード実行構造について説明します。ご参考までに、詳細は以下の...
負荷は通常、システム設計時に予測されます。システムがパブリック ネットワークに公開されている場合、悪...
この問題に関して、オンライン リソースをたくさん見つけました。ここにいくつかの方法を示します。コード...
目次1. システム環境2. 運用プロセスと途中で遭遇した問題1. システム環境1. Tencent ...
MacにMySQLデータベースをインストールし、環境変数を設定する手順を参考までに記録します。具体的...
コードをコピーコードは次のとおりです。 html {オーバーフロー: 非表示; }体{オーバーフロー...
目次1. はじめに2. 構成3. 作業プロセス4. 建築5. 表示例MHA (Master HA) ...
目次問題の説明方法 1 (バックエンドが画像 URL を返す)方法 2 (フロントエンドで requ...
1. Dockerネットワークモードdocker run が Docker コンテナを作成するときに...
Linux に PHP7 をインストールするにはどうすればいいですか? 1. 依存パッケージをインス...
以前は、ほとんどすべての Web サイトに、すべてのページをリストしたサイトマップ ページがありまし...
一つの環境CentOS 7にVMware Toolsをインストールしてホストの共有フォルダへのアクセ...
目次序文ステップ序文今日、es ログが記録されていないことに気付きました。filebeat、elas...
水平方向では、テーブルの配置を左、中央、右に設定できます。基本的な構文<テーブル配置=&quo...
この記事では、主にMACオペレーティングシステムでのMySQL5.7とMySQLWorkbenchの...