データベースの冗長フィールドを合理的に使用する方法

データベースの冗長フィールドを合理的に使用する方法

privot は、多対多の関係の中間テーブルです。 PT5 フレームワークは自動的に privot を起動します。

privotは必要ないので非表示にする必要があります。また、privotはモデル自体には含まれておらず、中間データです。

冗長フィールドに加えて、写真を記録するためのテーブルと製品を記録するための別のテーブルがあります。

商品画像のURLを画像内に載せることができます

同時に、商品に画像IDと画像URLを入れてください

これら 2 つのフィールドは繰り返され、データの冗長性が生じます。データベースは冗長な情報を回避するように設計されているのに、なぜ冗長性を使用するのでしょうか。

これは主にクエリのパフォーマンスを考慮するためです。

ここでデータの冗長化を行ったので、画像テーブルへのクエリの数を減らし、クエリを高速化できます。

ただし、データの冗長性によりデータの整合性と一貫性を維持することが困難になるため、データの冗長性を乱用することは推奨されません。同じ情報を記録する場所が 2 つありますが、データを書き込むときは 2 つの場所に書き込む必要があります。最大の問題は削除と更新です。更新時に、1 か所の IMG が変更された場合は、両方を変更する必要があります。そうしないと、データの不整合が発生します。ただし、データの冗長性は依然としてかなり使用されています。

WEB 開発では、いくつかの必要なデータベース最適化技術を習得することに加えて、適切なタイミングで冗長フィールドを使用することで、半分の労力で 2 倍の結果を達成することもできます。たとえば、次の例では、このように設計されたテーブルがいくつかあります。

  • ユーザーテーブル [user]: id、userName
  • プロジェクト テーブル [プロジェクト]: id、projectName、user_id
  • バージョン テーブル [バージョン]: id、versionName、project_id
  • カテゴリ テーブル [category]: id、categoryName、version_id
  • コンテンツテーブル [コンテンツ]: id、テキスト、category_id

それはそれくらいです。冗長なフィールドがなく、見栄えが良いです。また、データベース設計の 3 つの主要なパラダイムにも準拠しています。

まず質問をしましょう。これを質問 X と呼びましょう。

質問 X: 特定のバージョンのコンテンツ リストをクエリする場合、SQL は次のように記述する必要があります。

コンテンツ c、カテゴリ t から c.* を選択します。c.category_id=t.id かつ t.version_id=?

問題はなさそうです。このクエリを最適化するにはどうすればよいでしょうか?この質問については最後に議論します。そのような問題がある場合は、上記のテーブル設計に戻りましょう。たとえば、コンテンツ A がユーザー U に属しているかどうかを確認したいのですが、どうすればよいでしょうか?

  • コンテンツAが属するカテゴリBを検索する
  • カテゴリ B のクエリ バージョン C
  • バージョン C が属するプロジェクト D を照会する
  • アイテムDがユーザーUに属しているかどうかを照会し、コンテンツAがユーザーUに属しているかどうかを判断します。

これは非常に悪い行為ですよね?この時点で、このテーブル設計の弱点に気付いたはずです。それで私たちは何をすべきでしょうか?

冗長なフィールドです!はい、テーブルに冗長フィールドを追加する必要があります。上記の各テーブル (ユーザー テーブルを除く) に user_id フィールドを追加するとどうなるでしょうか?

まず、各テーブルの user_id フィールドの値は変更されないことが保証されます。したがって、このフィールドの値は一度設定したら変更する必要はありません。

次に、上記の質問に戻り、コンテンツ A がユーザー U に属しているかどうかを照会します。現在のアプローチは次のとおりです。

コンテンツAのuser_idがユーザーUのIDであるかどうかを確認する

たった一歩!とても単純で粗雑ですよね?かなり爽やかですよね?

冗長フィールド user_id を追加するだけで、コーディング量が大幅に削減され、データベース クエリの効率が N 倍向上します。また、このフィールドは一度だけメンテナンスする必要があります。

冗長フィールドの威力がわかったので、質問 X に戻りましょう。そのビジネスロジックを最適化するにはどうすればよいでしょうか?

正しいアプローチは、コンテンツ テーブルに version_id フィールドを追加することです。このフィールドは us​​er_id フィールドに類似しており、一度だけメンテナンスすれば済むことは確かです。

すると、質問 X の SQL は次のように変更されます。

c.version_id=? のコンテンツ c から c.* を選択します。

とてもシンプルなSQLです!

上記は、適切なデータベース冗長性が場合によっては良い選択であることを示しています。

要約する

以上がこの記事の全内容です。この記事の内容が皆様の勉強や仕事に何らかの参考学習価値をもたらすことを願います。123WORDPRESS.COM をご愛顧いただき、誠にありがとうございます。これについてもっと知りたい場合は、次のリンクをご覧ください。

以下もご興味があるかもしれません:
  • SQLと各種NoSQLデータベースの使用シナリオの説明
  • データベース言語分類DDL、DCL、DMLの詳しい説明
  • MySQL: MySQL 関数
  • MySQL データベースの型変換のための CAST 関数と CONVERT 関数の説明
  • MySQL 8.0.15 インストール グラフィック チュートリアルとデータベースの基礎
  • SQL SERVER データベースのバックアップ コードの例
  • PostgreSQL データベースのウィンドウ関数の構文と使用法
  • MySQL マスター/スレーブ データベース同期構成と一般的なエラー
  • PHP シングルトン モード データベース接続クラスとページ静的実装メソッド
  • 数千万のデータベースクエリでクエリ効率を向上させるにはどうすればよいでしょうか?

<<:  CentOS 6.8 での Hadoop 3.1.1 完全分散インストール ガイド (推奨)

>>:  javascript 入力画像のアップロードとプレビュー、FileReader プレビュー画像

推薦する

MySQLのインデックス選択と最適化の詳細な説明

目次インデックスモデルB+ツリーインデックスの選択インデックスの最適化インデックスの選択性カバーイン...

Windows での Tomcat サーバーのインストールに関するチュートリアル

1 ダウンロードして準備するまず、公式ウェブサイトからTomcatをダウンロードする必要があります。...

SQLのさまざまな結合サマリーの詳細な説明

SQL 左結合、右結合、内部結合、自然結合 さまざまな結合の概要SQL には、左結合、右結合、内部結...

Vue でクラスとスタイルを使用して v-bind バインディングを使用するいくつかの方法

要素にクラスを追加/削除することは、プロジェクト開発では非常に一般的な動作です。たとえば、Web サ...

MySQL がエラーを報告: ファイルが見つかりません: './mysql/plugin.frm' 解決策

問題を見つける最近、仕事中に問題が見つかりました。問題は、MySQL ディスクがいっぱいだったことで...

Facebook によるインターネット サービスのほぼ完璧な再設計

<br />出典: http://www.a-xuan.cn/?p=197 先ほどFac...

タブ切り替え効果を実現するJavaScript

この記事では、タブ切り替え効果を実現するためのJavaScriptの具体的なコードを参考までに紹介し...

Linux 環境変数の設定方法のまとめ (.bash_profile と .bashrc の違い)

Linux では、アプリケーションをダウンロードしてインストールすると、起動時にアプリケーション名...

Vue3におけるキーの役割と動作原理についての簡単な説明

このキー属性の機能は何ですか?まずは公式の説明を見てみましょう。 kekey 属性は主に、新しいノー...

MySQL 結合テーブルと ID 自動増分の例の分析

結合の書き方左結合を使用する場合、左側のテーブルが必ず駆動テーブルになりますか? 2 つのテーブルの...

Windows10 での MySQL msi インストール チュートリアル (画像とテキスト付き)

1. ダウンロード1. MySQL msi 公式 Web サイトから最新のダウンロードをクリックす...

データベースSQL SELECTクエリの仕組み

私たちは Web 開発者として、プロの DBA ではありませんが、データベースなしではやっていけませ...

MySQLでトリガーを作成する方法

この記事の例では、参考のためにMySQLトリガーを作成するための具体的なコードを共有しています。具体...

Html+CSS 描画三角形アイコン

まずはレンダリングを見てみましょう: XML/HTML コードコンテンツをクリップボードにコピー&l...

MySQL の集計関数 count の使用法とパフォーマンスの最適化テクニック

この記事の環境はWindows 10、MySQLのバージョンは5.7.12-logです1. 基本的な...