問題タブ [denormalization]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
460 参照

mysql - MySQLは外部キーデータまたは結合を複製しますか?

Web サイトのユーザーとアカウントを処理する最善の方法を考えています。

すべてのユーザーは単一のアカウントに属し、アカウントは複数のユーザーを持つことができます。テーブルは MyISAM になるため、DB によって強制される参照整合性はありません。各ユーザーは、自分のコンテンツおよび/または所属するアカウントのすべてのユーザーのコンテンツを表示/追加/編集する権限を持っています。

DB 内の他のほとんどすべてのテーブルは、User テーブルを参照します。例えば。

したがって、ユーザーがアクセスできる製品を取得するには、自分自身だけにアクセスする権限があると仮定します。

アカウント全体にアクセスできるユーザーがアクセスできる製品を取得するには:

さて、問題は次のとおりです。製品、イベントなどにも accountId フィールドがある方がよいでしょうか?

これにより、使用されるほぼすべてのクエリで余分な結合が不要になります。

ユーザーが 1 つのアカウントから別のアカウントに移動することはないため、accountId は常に正しいものになります。サイトが使用する何百もの他のクエリからこれらの結合を削除するために、追加のデータ ストレージ要件と正規化を少し失う価値はありますか? 考慮すべきもう 1 つの点は、ユーザー テーブルはそれほど頻繁に書き込まれないため、結合の実行中にテーブルのロックに関する問題が発生する可能性は低いということです。

0 投票する
1 に答える
3598 参照

sql-server - SQL Server での冗長/非正規化データの自動更新

パフォーマンスを向上させるために、DB 設計で高レベルの冗長な非正規化データを使用します。通常は結合または計算する必要があるデータを保存することがよくあります。たとえば、UserテーブルとTaskテーブルがある場合、すべてのTaskレコードにUsernameUserDisplayNameを重複して格納します。この別の例は、UserテーブルにTaskCountを格納するなど、集計を格納することです。

  • ユーザー
    • ユーザーID
    • ユーザー名
    • ユーザー表示名
    • タスク数
  • 仕事
    • タスク ID
    • タスク名
    • ユーザーID
    • ユーザー名
    • ユーザー表示名

アプリには挿入、更新、または削除操作よりも多くの読み取りがあり、ユーザー名などの一部の値はめったに変更されないため、これはパフォーマンスに優れています。ただし、大きな欠点は、アプリケーション コードまたはトリガーを介して整合性を強制する必要があることです。これは、更新の際に非常に面倒になる可能性があります。

私の質問は、SQL Server 2005/2010 でこれを自動的に行うことができるかということです...おそらく永続的/永続的なビューを介して。別の可能性のあるソリューションまたはテクノロジーを推奨する人はいますか? CouchDB や MongoDB などのドキュメント ベースの DB は、非正規化されたデータをより効果的に処理できると聞いています。

0 投票する
1 に答える
420 参照

google-app-engine - Google App Engine とデータベースの「ビュー」

かなり複雑なデータ モデルを持つ GAE 用のアプリケーションを開発しています。

私の理解では、noSQL データベース、特に GAE を使用して複雑なデータ モデルを処理する良い方法は、非正規化されたデータの「ビュー」を使用することです。ブラウザクライアントが一部のデータを更新したい場合、サーバーは一部のコアデータに書き込みを実行し、クライアントが続行できるように「200 OK」を返し、タスクキューを使用して、書き込まれたデータが影響した可能性のある「ビュー」を更新します.

次に、クライアントが通常は SQL 結合を必要とするいくつかのオブジェクトに対してクエリを実行する場合はいつでも、代わりに、必要なすべてのデータが同じ「行」(またはアプリ エンジンの場合はエンティティ) にある「ビュー」をクエリできます。 )。

私が抱えている問題は、このビューの作成と更新はすべて、手動で行うべきものではなく、ライブラリが行うべきことのように見えることです。データのいくつかのビューを指定し、それらが適切に作成および処理されることを期待できる、GAE で動作するツールはありますか? 私はCouchDBがこれを行うと信じています...

0 投票する
2 に答える
376 参照

database - データベース設計、膨大な数のパラメーター、非正規化?

与えられたテーブルtblProject。これには無数のプロパティがあります。たとえば、幅、高さなど。数十個。

モバイルデバイス用のプロジェクトの設定を指定できる新しいモジュールを追加します。これは1対1の関係であるため、すべてのモバイル設定をtblProjectに保存する必要があります。ただし、リストは膨大になり、プロパティ間にあいまいさが生じます(つまり、Mobile_widthがwidthと混同されないように、すべてのモバイルフィールドの前にMOBILEを付ける必要があります)。

モバイル設定を非正規化して別のテーブルに保存するのはどれほど悪いことですか?または、設定を保存するためのより良い方法はありますか?プロパティと扱いにくくなり、テーブルで変更/検索するのが困難になります。

0 投票する
4 に答える
846 参照

php - 問題: MySQL パーサーを作成して JOIN を分割し、それらを個別のクエリとして実行する (クエリを動的に非正規化する)

MySQL クエリを取得して個々のクエリに変換するスクリプト、つまりクエリを動的に非正規化するスクリプトを見つけようとしています。

テストとして、4 つのテーブルを持つ単純な記事システムを構築しました。

  • 記事
    • article_id
    • article_format_id
    • 記事のタイトル
    • article_body
    • article_date
  • article_categories
    • article_id
    • カテゴリ ID
  • カテゴリー
    • カテゴリ ID
    • カテゴリ_タイトル
  • フォーマット
    • format_id
    • format_title

記事は複数のカテゴリに属する​​ことができますが、フォーマットは 1 つだけです。これは現実の状況の良い例だと思います。

すべての記事を一覧表示するカテゴリ ページ (format_title もプル) では、次のクエリを使用して簡単に実現できます。

ただし、作成しようとしているスクリプトは、このクエリを受け取り、解析して、クエリを個別に実行します。

したがって、このカテゴリ ページの例では、スクリプトはこれを効果的に実行します (動的に実行されます)。

これの課題は、SELECT および JOIN の列名をクエリ内の任意の順序で配置できるため、正しいクエリを正しい順序で実行すること (これは MySQL および他の SQL データベースが非常にうまく変換するものです) と、情報ロジックを実行することです。 PHPで。

私は現在、クエリを多次元配列に分割するのにうまく機能するSQL_Parserを使用してクエリを解析していますが、上記のものを解決することは頭痛の種です。

どんな助けや提案も大歓迎です。

0 投票する
1 に答える
907 参照

sql - mysql日時クイック構造

月曜日と木曜日の売上を比較するなどの質問の日時はどれくらい適切ですか?

Mysql は日時を内部的に unix-timestamp として保持しますか? そのため、月曜日を見つけるにはかなりの費用がかかります。

追加の属性「日」が導入され、インデックスが与えられると、mysql のパフォーマンスがどれだけ向上するかを経験した人はいますか? これが好きなインディーズはまったく使用されますか?7つの異なる状態しかありません...

0 投票する
2 に答える
157 参照

performance - これらは、NOSQL スケーラブルな Web サイト アーキテクチャで結合なしでクエリを作成する方法ですか?

スケーラブルな Web サイトを設計する方法の 1 つは、結合を使用しないことだとよく耳にします。ほとんどのデータはリレーショナルであるため、世界はどのようにそれを行うのですか?

私の限られた調査から、次のような考えが得られました。

A) データが本質的にリレーショナルである場合は、実際にリレーショナル データベースを使用してください。つまり、ジョブに適したツールを使用してください。

B) データの非正規化バージョンを維持します。

C) 強制的に非リレーショナルにできるデータの場合、NOSQL を使用できます。結合が不要になるようにデータを設計します。

D) データを関連付ける必要がある場合、アプリケーション レイヤーは、データ セットを 1 つずつ取得し、結果を手動で関連付けることにより、結合を手動で実装する必要があります。

E) アプリケーション層での手動参加は非常に遅いため、これらをオフラインで実行してみてください (ユーザーが待機している間ではない)。

F) Map-Reduce を使用します。

これは正しいですか、それ以上の答えはありますか?

0 投票する
4 に答える
317 参照

time - データウェアハウスのパフォーマンスの違いにより、時間が非正規化されます

本の中で私は、時間を別々の列に分割すると、それが実際のパフォーマンスの向上になると読みました。たとえば、日、月、年など...

  1. データベースには、時間列のインデックスを処理するためのスマートなアプローチがすでにあるので、時間を分割して数百万のインデックスバリアントを追加することは廃止されていますか?

  2. パフォーマンスの違いの経験はありますか?

考えられるクエリは、月曜日の朝の13:00〜14:00の売上です。

0 投票する
1 に答える
1030 参照

database - Lucene インデックス作成のためのデータベース テーブルの非正規化

Lucene を使い始めたばかりで、コンテンツを検索できるようにデータベースのインデックスを作成しようとしています。索引付けに関心のある 3 つのテーブルがあります。

1. イメージ テーブル- これは、各エントリがイメージを表すテーブルです。各画像には一意の ID とその他の情報 (タイトル、説明など) があります。

2. People テーブル- これは、各エントリが人物を表すテーブルです。各人には一意の ID とその他の情報 (名前、住所、会社など) があります。

3. クレジット テーブル- このテーブルには 3 つのフィールド (画像、人物、クレジット タイプ) があります。その目的は、その画像のクレジットとして一部の人々を画像に関連付けることです。各画像には、複数の人物 (監督、写真家、小道具のアーティストなど) を含めることができます。また、人物は複数の画像にクレジットされています。

Lucene を使用していくつかの検索を実行できるように、これらのテーブルにインデックスを付けようとしていますが、読んだように、構造を平坦化する必要があります。

私が思いついた最初の解決策は、画像/人物の組み合わせごとに Lucene ドキュメントを作成することです。これにより、インデックスに多くの重複コンテンツが作成されるのではないかと心配しています (画像/人物のすべての詳細は、画像に取り組んだ各人物の各ドキュメントで複製する必要があります)。

これを手伝ってくれるLuceneの経験者はいますか? 非正規化には一般的な解決策がないことを知っているため、より具体的な例を示しました。

ありがとうございます。データベースに関する詳細情報を喜んで提供します。

PS: 残念ながら、データベースの構造を変更する方法はありません (クライアントに属します)。私は自分が持っているもので働かなければなりません。

0 投票する
4 に答える
1055 参照

c# - MongoDB, C# and NoRM + Denormalization

I am trying to use MongoDB, C# and NoRM to work on some sample projects, but at this point I'm having a much harder time wrapping my head around the data model. With RDBMS's related data is no problem. In MongoDB, however, I'm having a difficult time deciding what to do with them.

Let's use StackOverflow as an example... I have no problem understanding that the majority of data on a question page should be included in one document. Title, question text, revisions, comments... all good in one document object.

Where I start to get hazy is on the question of user data like username, avatar, reputation (which changes especially often)... Do you denormalize and update thousands of document records every time there is a user change or do you somehow link the data together?

What is the most efficient way to accomplish a user relationship without causing tons of queries to happen on each page load? I noticed the DbReference<T> type in NoRM, but haven't found a great way to use it yet. What if I have nullable optional relationships?

Thanks for your insight!