1. はじめに外部キー制約を使用するかどうかという話題は、すでに決まり文句になっています。学校では、教師が教えることのほとんどが、外部キー制約を確立することです。しかし、実際の仕事では、外部キーを使用せず、コード ロジックを通じて外部キーを制御することがよくあります。 Alibaba の JAVA 仕様でも明確に規定されています: [必須] 外部キーとカスケードを使用してはならず、すべての外部キーの概念はアプリケーション層で解決する必要があります。 なぜこのような規制をする必要があるのでしょうか?外部キー制約を使用する必要がありますか?例を挙げて説明しましょう 2. 例これで、データベースに [product と project] という 2 つのテーブルが作成されました。[project] の この制約の存在により、テーブル内のデータ間の関係の整合性が確保されることがわかります。汚れたデータが存在する可能性は低くなります。これは外部キー制約の非常に明白な利点です。 要約すると、外部キー制約には次の利点があります。
しかし、無視できない欠点もあります。 パフォーマンスの問題 [project] と [product] の 2 つのテーブルを作成しました。[project] テーブルには、 このとき、[project] テーブルにデータを挿入するたびに、まず [product] に移動して、対応する関連データがあるかどうかを確認します。プログラムによって制御される場合は、このクエリを省略できます。ただし、外部キー制約が設定されている場合は、クエリは確実に実行されます。これは実際には冗長です。関連フィールドが少ない場合は影響がない可能性がありますが、関連フィールドが増えると、この影響は特に顕著になります。 デッドロック 外部キーによりクエリは他のテーブルに依存するため、InnoDB は親テーブル (または関連テーブル) 内の対応する値をチェックする必要があります。これにより、親テーブルの行もロックされ、トランザクションが完了する前に行が削除されないようにします。これにより、予期しないロック待機やデッドロックが発生する可能性があり、その原因を特定するのは困難です。 シャーディングの難しさ 制約のあるデータベースは、異なるデータベースやテーブルに分割する必要がある場合に特に使いにくくなります。 開発/テスト効率の低下 日常のテストプロセスでは、バグが見つかり、それを再現したりテストを容易にしたりしたいという状況に頻繁に遭遇します。テストを容易にするために、データベース テーブルのデータを直接変更します。 これは標準化されていませんが、実際のところ、効率を大幅に向上させることができます。これは疑いの余地がありません!ただし、このような操作では、実際にはプログラムのバグではないデータによってバグが発生したり、潜在的なバグが発見されなかったりするなどの問題が発生する可能性もあります。 結論現在、多くのインターネット企業、特に大規模な企業では、外部キーを無効にすることが義務付けられています。これはパフォーマンスの問題だけでなく、インターネットビジネスの変化が速いことが主な原因で、間接的にテーブル構造の変化につながります。外部キー制約の存在は予期しない問題を引き起こし、開発効率を低下させる可能性が非常に高くなります。したがって、変更をより適切に受け入れるために、重要でない状況や高い信頼性を必要としないビジネス シナリオでは外部キー制約を使用しないことをお勧めします。 これで、MySQL データベースで外部キー制約を使用する必要があるかどうかに関するこの記事は終了です。MySQL データベースの外部キー制約の詳細については、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: CSS はモバイル互換性の問題を解決するために 0.5px の線を実装します (推奨)
>>: レスポンシブフレームワークのテーブルヘッダーの自動改行問題に対する簡単な解決策
多くの場合、フォームを美しくするために、送信ボタンが画像に置き換えられます。ただし、細部に注意を払わ...
ページを更新せずにフォーム送信を実装するために Ajax を使用することは、プロジェクトでよく使用さ...
1. はじめに外部キー制約を使用するかどうかという話題は、すでに決まり文句になっています。学校では、...
要約すれば: 1. データベースの設計とテーブルの作成時にパフォーマンスを考慮する2. SQLの記述...
背景まず最初に、私はフロントエンド開発の専門家ではないことを述べておきたいと思います。私の以前のコン...
序文この記事では主に、MySQL で重複レコードをクエリして削除する方法を紹介します。参考と学習のた...
123WORDPRESS.COM HTML チュートリアル セクションに戻るには、ここをクリックして...
目次1. 日付2. 正規表現3. オリジナルパッケージタイプ序文:参照値(オブジェクト)は、 Dat...
HTML は Hypertext Markup Language の略です。現在、ほとんどの Web...
この記事では、MySQL 8.0.12解凍版のインストールチュートリアルを参考までに紹介します。具体...
MySQL 8.0.12のインストールと設定方法を記録してみんなで共有します。 1. インストール1...
問題: vue-cil3 は、`--fix` オプションで修正できる可能性のある警告とともに実行され...
チュートリアルシリーズMySQL シリーズ: MySQL リレーショナル データベースの基本概念My...
目次vimプラグインマネージャーをインストールするプラグインデモを追加プラグインを削除するには: v...
01. コマンドの概要dirname - ファイル名からディレクトリ以外のサフィックスを削除しますd...