データ値を複数のテーブルに保存する場合とクエリを介して同じ値にアクセスする場合

アヘルツフェルド

複数のテーブルに値が格納されるデータベーステーブルを設計しました。これらはすべて、1つのテーブルへのクエリを介して実現できます。

私の質問は、重複データを保存せずに常にクエリを実行すること、または必要なクエリの数を減らすために小さな値を複数回保存することをお勧めしますか?

コンテキストとして、SQLAlchemyとSQLiteを使用して韓国語の質問をクイズするPythonアプリを作成しています。

ユーザー、クイズ、質問のクラスがあります。

問題の値は、クイズの質問に関してはnum_correct、num_wrongです。

基本的に、quiz_idによるクイズに関連するすべての質問を格納する質問テーブルがあります。各質問には、その質問が正しく回答されたかどうかを示すブール値を格納する「正しい」列があります。

私の「クイズ」テーブルには、そのクイズで回答された質問に関するnum_correct / num_wrongの列があります。

私の「ユーザー」テーブルには、常に正解と不正解の合計に関するnum_correct / num_wrongの列もあります。

「クイズ」の値を取得するには「質問」テーブルにクエリを実行し、「ユーザー」の値を取得するには同じことができることに気付きました。

この場合(そして一般的に)、ベストプラクティスを考慮した場合に推奨される戦略はどれですか?

私はグーグルをかなり試しましたが、質問の言い回しは少し注意が必要です。

ゴードン・リノフ

重複データの問題は、リレーショナルデータベースでは複雑です。アプリケーションがデータの変更を行っている場合、データが重複すると同期の問題が発生します。データは複数の場所で更新する必要があります。

これはさまざまな理由で悪いことです。

  • 単一の情報項目を更新するには、複数の変更が必要です。
  • 複数の変更が同期しなくなる可能性があります。つまり、クエリには一貫性のあるデータが表示されません。
  • データベース構造の変更(新しいテーブルの追加など)は、かなり面倒な場合があります。

データベース、ACIDプロパティ、トランザクション、およびトリガーを介して、この機能をサポートします。ただし、オーバーヘッドが追加されます。一般に、このような複製は、事前にではなく、必要に応じて(つまりパフォーマンス)追加されます。したがって、更新が頻繁に発生するときに情報が1回だけ保存される正規化されたデータモデルが強く優先されます。

一方、一部のデータベースは主にクエリの目的で使用されます。これらのデータベースはしばしば非正規化されます-そしてかなりそうです。たとえば、顧客テーブルには、多くの異なるディメンションに沿った要約が含まれ、数十の基礎となるテーブルから情報を収集する場合があります。

これにより、クエリが簡素化されるだけでなく、ビジネスロジックエンコードされます。データの使用に関する大きな問題の1つは、人によって定義がわずかに異なることです。1年の顧客は、365日前に始めた人ですか。去年の同じ日に始めた人はいますか?12ヶ月間存在している人はいますか?標準化された分析テーブルがその答えを提供します。

あなたのケースは最初の状況にもっと陥っているようです。あなたは更新を行っており、要約を前もって保存することを考えています。私はあなたがこれをするのを思いとどまらせます。データを要約するために必要なクエリを書くだけです。おそらく、インデックスとパーティショニングは、必要なすべてのパフォーマンスを提供します。

何百万ものユーザーが何十もの質問で何百ものクイズを受験することを前もって知っている場合は、パフォーマンスの最適化について前もって検討することをお勧めします。しかし、数十の質問で少数のクイズを受験する何千人ものユーザーの場合は、単純なデータモデルから始めて、それが機能することを実証した後、より複雑にします

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

テーブル セルの 2 つの値を比較して、同じ場合にクラスを追加する

分類Dev

同じ行内のセル値がExcelブックの値と等しい場合にHTMLテーブル内のhrefをクリックする方法

分類Dev

複数のエンティティが共通のエンティティから派生し、同じテーブルに保存されている場合に、エンティティごとにオブジェクトをクエリする方法

分類Dev

複数の類似オブジェクトに対して同じクエリを実行する場合のデータベース アクセスの削減

分類Dev

同じネットワーク内の他のデバイスにも同じパブリックIPがある場合、パブリックIPを介してコンピューターのローカルホストにアクセスするにはどうすればよいですか?

分類Dev

私のデータベースにangular.jsとPHPを使用して値がない場合でも、テーブルに複数の行を取得する

分類Dev

Javaを使用して複数のデータベース接続とクエリを同時に行う場合、同期を使用する必要がありますか?

分類Dev

複数のスレッドが同じリストオブジェクトに値を拡張している場合、データが失われるリスクはありますか?[Python]

分類Dev

Djangoは、管理サイトで表示する場合とスクリプトでモデルのクエリを表示する場合に、同じモデル属性に対して2つの異なるタイムゾーンを表示します

分類Dev

クエリに値がある場合はテーブルを更新します

分類Dev

オブジェクトに直接質問する場合とすべてのテーブルエントリを反復する場合の属性値の違い

分類Dev

同じページに同じクラスを持つ複数の要素がある場合、クラスを介して ID を選択する方法

分類Dev

特定のセルの数式が値を変更した場合にデータ検証セルの内容をクリアするマクロ

分類Dev

データ制限が異なる場合に、複数の軸を使用して同じアスペクト(正方形)プロットを作成しますか?

分類Dev

Ionic-セッショントークンをグローバルに(アプリの場合)アクセス可能な変数として保存する方法は?

分類Dev

結合テーブルに値のリストがすべて含まれている場合にのみレコードを検索するSQLクエリ

分類Dev

ループを介して複数のテキストビューを動的に追加しようとすると、アプリがクラッシュします。単一のテキストビューを追加する場合は正常に機能します

分類Dev

HTTPPOSTリクエストをブックマークなどに保存するGETリクエストの場合と同じように

分類Dev

異なる月と合計値で同じテーブルの2つのクエリを結合します

分類Dev

インデックスと列が同じ場合に、別の列のデータセットの相関値を取得する方法

分類Dev

配列インデックスが同じ場合にforeachでテーブルデータを取得する方法

分類Dev

Python:キーの値が同じディクショナリ内に複数回存在する場合は、キーの値をマージします

分類Dev

nullが存在する場合に複数の左結合テーブルをクエリする方法

分類Dev

複数のディレクティブが同じ要素を共有する場合、AngularJSスコープについて混乱する

分類Dev

複数のターゲットが同じソースファイルを使用している場合、-save-tempsを使用してアセンブリファイルを保持するにはどうすればよいですか?

分類Dev

ヘッダーにコンテンツタイプがない場合にasTextを介してscalaplayでリクエスト本文にアクセスする方法

分類Dev

新しい作成テーブルの場合に bash を介して Oracle テーブルにアクセスする方法

分類Dev

同じフィールドの複数の値に対してDjangoモデルクエリを実行する

分類Dev

インデックスのグループが別の列で同じ値を持っている場合は、DataFrameをフィルタリングします

Related 関連記事

  1. 1

    テーブル セルの 2 つの値を比較して、同じ場合にクラスを追加する

  2. 2

    同じ行内のセル値がExcelブックの値と等しい場合にHTMLテーブル内のhrefをクリックする方法

  3. 3

    複数のエンティティが共通のエンティティから派生し、同じテーブルに保存されている場合に、エンティティごとにオブジェクトをクエリする方法

  4. 4

    複数の類似オブジェクトに対して同じクエリを実行する場合のデータベース アクセスの削減

  5. 5

    同じネットワーク内の他のデバイスにも同じパブリックIPがある場合、パブリックIPを介してコンピューターのローカルホストにアクセスするにはどうすればよいですか?

  6. 6

    私のデータベースにangular.jsとPHPを使用して値がない場合でも、テーブルに複数の行を取得する

  7. 7

    Javaを使用して複数のデータベース接続とクエリを同時に行う場合、同期を使用する必要がありますか?

  8. 8

    複数のスレッドが同じリストオブジェクトに値を拡張している場合、データが失われるリスクはありますか?[Python]

  9. 9

    Djangoは、管理サイトで表示する場合とスクリプトでモデルのクエリを表示する場合に、同じモデル属性に対して2つの異なるタイムゾーンを表示します

  10. 10

    クエリに値がある場合はテーブルを更新します

  11. 11

    オブジェクトに直接質問する場合とすべてのテーブルエントリを反復する場合の属性値の違い

  12. 12

    同じページに同じクラスを持つ複数の要素がある場合、クラスを介して ID を選択する方法

  13. 13

    特定のセルの数式が値を変更した場合にデータ検証セルの内容をクリアするマクロ

  14. 14

    データ制限が異なる場合に、複数の軸を使用して同じアスペクト(正方形)プロットを作成しますか?

  15. 15

    Ionic-セッショントークンをグローバルに(アプリの場合)アクセス可能な変数として保存する方法は?

  16. 16

    結合テーブルに値のリストがすべて含まれている場合にのみレコードを検索するSQLクエリ

  17. 17

    ループを介して複数のテキストビューを動的に追加しようとすると、アプリがクラッシュします。単一のテキストビューを追加する場合は正常に機能します

  18. 18

    HTTPPOSTリクエストをブックマークなどに保存するGETリクエストの場合と同じように

  19. 19

    異なる月と合計値で同じテーブルの2つのクエリを結合します

  20. 20

    インデックスと列が同じ場合に、別の列のデータセットの相関値を取得する方法

  21. 21

    配列インデックスが同じ場合にforeachでテーブルデータを取得する方法

  22. 22

    Python:キーの値が同じディクショナリ内に複数回存在する場合は、キーの値をマージします

  23. 23

    nullが存在する場合に複数の左結合テーブルをクエリする方法

  24. 24

    複数のディレクティブが同じ要素を共有する場合、AngularJSスコープについて混乱する

  25. 25

    複数のターゲットが同じソースファイルを使用している場合、-save-tempsを使用してアセンブリファイルを保持するにはどうすればよいですか?

  26. 26

    ヘッダーにコンテンツタイプがない場合にasTextを介してscalaplayでリクエスト本文にアクセスする方法

  27. 27

    新しい作成テーブルの場合に bash を介して Oracle テーブルにアクセスする方法

  28. 28

    同じフィールドの複数の値に対してDjangoモデルクエリを実行する

  29. 29

    インデックスのグループが別の列で同じ値を持っている場合は、DataFrameをフィルタリングします

ホットタグ

アーカイブ