問題タブ [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.
normalization - InfoCube でディメンション テーブルが非正規化されるのはなぜですか?
仕事で SAP BW を学んでいます。SAP クラスの資料には、InfoCube ではディメンションが非正規化されていると記載されています。正規化されたテーブルの利点は理解していますが、ディメンションが非正規化される理由がわかりません。
mysql - MySQL で更新されたテーブルの非正規化、加重集計
今回は、より一般的な質問を受けました。元のデータが定期的に更新される場合、データの加重集計にストアド プロシージャではなく複数のビューを使用する必要がありますか?
基本的に、より大きなトランザクション データベースから同じ種類のデータ (テーブル) をインポートすることによって定期的に更新されるローカルの MySQL データベースがあります。
ローカル データベースは、統計分析に使用されます。したがって、統計ソフトウェア パッケージで使用するために、ローカルでデータを非正規化 (基本的に集計) します。これまでは、ストアド プロシージャを使用していました。これは、重み付けスキーム (基本的には、変数で乗算される重みを含む他のテーブル) が有効になったときに、扱いやすい (そしてより明確に配置されている) と感じたからです。
ただし、ストアド プロシージャの欠点は、テーブルに新しいデータが入力されたときに、すべてを再度実行しなければならないことです。明らかに、私は DBA ではありません...ですから、当然のことを言うのをためらわないでください :) この種のシナリオを処理するための最良のアプローチは何ですか? SPまたはビュー?それともまったく違うもの?
事前に提案があればthx!
database - この場合、非正規化を行う必要がありますか?
状況は次のとおりです。
[職種] は 1 つの [職種] に属し、どの [職種] は 1 つの [業種] に属しますか
したがって、私の初期設計は次のようなものです。Job には Job Category を検索する fk があり、Job Category には Industry を参照する fk があります。しかし、問題は、仕事がどの業界に属しているかを知りたい場合、職種を見つけ、職種 ID に基づいて業界テーブルを振り返る必要があることです。だから、私は非正規化を考えています。
しかし、そうするには2つのアプローチがあり、どちらが良いかを考えています。まず、ジョブ カテゴリ、業界を含むすべてのものを同じ場所 (Job テーブル) に記録します。
もう 1 つのアプローチは、Job は引き続き Job Category を参照しますが、Job Category には業界情報を格納するフィールドがあります。
どちらのアプローチが良いと思いますか? ありがとうございました。
mysql - 評価システムクエリ
私はMySQLで映画の評価システムを構築しましたが、私のクエリがすべての評価を合計してそれを分割すると、何百万ものレコードを合計しなければならない可能性があるという懸念があります。
私が考えた解決策の1つは、基本的にmemcachedに評価をキャッシュし、あまり使用されていないアイテムに対してのみ評価操作を実行することでした。ただし、それでも、誰かが行った場合にあまり評価されていない映画の場合、多くの行を計算する必要がある場合は、クエリに長い時間がかかる可能性があります。
私が考えたもう1つの解決策は、テーブルを常に更新する一時テーブルを作成することでしたが、映画の評価が高く、誰かがそれにアクセスしようとすると、INNODBは行ロックを行うと信じているので、デッドロックが発生するか、長期的には何か?
google-app-engine - App Engine が必要とするインデックスの数を減らすために、プロパティを非正規化する必要がありますか?
私のクエリの 1 つは、ユーザー入力に応じて、さまざまなフィルターと並べ替え順序を取ることができます。これにより、50 以上のインデックスを含む巨大な index.yaml ファイルが生成されます。
多くのブール値および複数選択 (文字列) プロパティを単一の文字列リスト プロパティに非正規化することを考えています。このようにして、クエリの組み合わせの数を減らします。ほとんどのクエリは文字列リスト プロパティにフィルターを追加するだけであり、インデックス カウントが劇的に減少するはずだからです。
確かにストレージ サイズは増えますが、それほど多くのデータがないため、これは実際には問題ではありません。
これは良いアイデアのように聞こえますか、それともこのアプローチには他に欠点がありますか?
mongodb - 埋め込みコメントの保存と MongoDB でのオーバーヘッドの回避
私の問題を説明させてください。誰かが良いアドバイスをくれることを願っています。
私は現在、大量のアプリケーションの情報とメタデータを保存する Web アプリに取り組んでいます。アプリケーションごとに、アプリケーションとアプリケーションのバージョン ID に関連付けられた 10 ~ 100 のコメントが存在する可能性があります。将来のスケーラビリティとスピードを簡単にする必要があるため、MongoDB を使用しています。読み取りパフォーマンス上の理由からコメントをコレクションに埋め込む必要があることを読みましたが、これが私の場合に機能するかどうかはわかりません。私は別の投稿を読みました:
一般に、特定のデータ セットを単独で操作する必要がある場合は、それをコレクションにします。
投稿者: @kb
ただし、私の場合、自分でコレクションに取り組む必要はありません。さらに説明しましょう。アプリのテーブル (フィルター可能) があり、アプリのリストをスクロールまたはフィルター処理すると、エントリが動的に読み込まれます。アプリケーション コレクション内にコメントを埋め込むと、アプリケーション エントリをテーブルに動的にロードするときに、すべてのコメントが送信されます。ただし、ユーザーがコメントを表示するように要求した場合にのみコメントを読み込みたいという点で、「遅延読み込み」を実行したいと考えています (テーブル内のエントリをクリックすることによって)。
例として、私のテーブルは次のようになります
私の質問は、より効率的なものは何ですか? MongoDB での読み取りは、各アプリケーションですべてのコメントを取得しても問題にならないほど高速ですか? ユーザーがアプリケーションをフィルタリングせずに一番下までスクロールした場合、125k から 250k のエントリ/アプリケーションがロードされる可能性があります。
sql - 非正規化ファイルから正規化テーブルにデータをロードします
正規化されたテーブルにロードする必要がある非正規化されたテキストファイルを受け取りました。
非正規化されたテーブル:
CustomerID-カテゴリ-カテゴリ2-カテゴリ3-カテゴリ41
-A-B-C-D
これを正規化すると、次のようになります。
CustomerID-カテゴリ
1-A1
--B 1
--C 1
--D
これを実現するためのT-SQLステートメントを作成する最良の方法は何ですか(SQL Server 2008)?
sql - この場合、非正規化は許容されますか?
私は次のlocations
表を持っています:
とphones
テーブル:
さて、どんな寄付店でも、最大5つの電話番号が一番上になる可能性があることに注意してください。順序は関係ありません。
最近、電話番号も含む店舗関連情報を含む別のテーブルを追加する必要がありました。
現在、この新しいテーブルにはlocationIDが適用されていないため、前の電話テーブルに電話を保存することはできません。
DBを正規化しておくには、最終的に、データを取得するために2つの新しいテーブルと合計4つの結合が必要になります。非正規化すると、古いテーブルは次のようになります。
合計2つのテーブルと2つの結合があります。
大きな苦痛になる可能性があるので、私はフィールドを持つdata1
のが好きではありません。だから、あなたの意見は何ですか。data2
data3
linq - Linq: 1 つの分割列から作成された「仮想」列のクエリ
私はかなり見栄えが悪いが、変更不可能なデータベースで作業しています。
「位置」列を持つ「場所」というテーブルがあります。
この列には「A SHELF 5」のような値があります
これは「ケース A、シェルフ 5」を意味します。理想的な世界では、値がそれぞれ "A" と 5 の Case 列と Shelf 列があります。
私が疑問に思っているのは、エンティティクラスでいくつかの「仮想」(おそらく正しい言葉ではない)列を定義する方法があるかどうかです。そうすれば、それらの列が存在するかのようにテーブルをクエリできます( Selects、Where 句、Group By など)?
確かに、私は Linq にかなり慣れていないので、やりたいことを説明するのに適切な技術用語を使用していません。そのため、答えを見つけるのが難しくなります。したがって、誰かが私が始めるのに役立つ入門ドキュメントを教えてくれれば、それは有効な答えだと思います。
さらに複雑にするために、他のいくつかの列の値に応じて、列は上記のように構造化されているだけですが、そこには行きません。
これを読んでくれてありがとう。過去の経験から言うと、SOクルーは最高です!
oracle - テーブルの正規化: 一連の行で一意の列を見つける (Oracle 10.x)
次の構造のテーブルがあります。
ご覧のとおり、これは非正規化されたテーブルであり、Worker と Person (および 1 つの Person の多くのバージョン) の両方のデータを 1 つのテーブルに保持します。私の願いはそのテーブルを正規化することですが、テーブルには大量のデータ (多数の列) が含まれているため、どの列を Workers テーブルに、どの列を Persons テーブルに移動する必要があるかを確認する必要があります。結果は次のようになります。
そのためには、すべての一意の Person (WorkerPersons の PersonID で区切られている) で Person の範囲が異なるデータを分析する必要があります。例えば:
この場合、PersonA には 3 つのバージョンがあり、PersonB には 2 つのバージョンがあります。Column1 の値は Person のすべてのバージョンで常に同じであり、その列をテーブル Worker に移動できます。ただし、Column 2 と Column3 の値は Person のバージョンが異なると変化するため、これらの値は Person テーブルに移動する必要があります。
想像もつきませんが、このような正規化が必要なテーブルが約 10 個あり、それぞれに約 40 列あります。各テーブルには、約 500k から 5m の行が保持されます。
どの列をどこに移動するかを分析するのに役立つスクリプトが必要です。テーブル全体で一意の Person の範囲で変化するすべての列を出力するスクリプトが必要です。しかし、それを行う方法はわかりません。次の行と比較するためにLAG分析機能を試しましたが、変更された列をどのように出力するかは私にはわかりません。
お知らせ下さい。
よろしくお願いします、 アンドリュー