問題タブ [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 に答える
645 参照

oracle - マテリアライズド・ビューは、高速で非正規化された大きなテーブルとして使用できますか?

Oracleマテリアライズド・ビューを使用して、外部キーを持つ複数の関連テーブルを結合し、瞬時に更新されるより大きな非正規化された大きなテーブルを作成できますか?

一部の調査では、高速更新を使用している間は結合が許可されないと言われています。

Oracle Materalizedビューでこの種のことを実行できるというのは間違っていると思いますか?

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

mysql - トリガーを使用して、関連しているが大幅に非正規化された2つのテーブルを接続する必要がありますか?

これまでトリガーを使用したことはありませんが、これは確かなユースケースのようです。トリガーが使用すべきものであるかどうかを知りたいのですが、そうであれば、それをどのように実行するかについて少し手をつなぐことができます。

基本的に、2つの大幅に非正規化されたテーブルとがgoalsありusers_goalsます。どちらにも、データを複製するtitle列( )があります。したがって、「トリガーの使用方法を学ぶ」という1つの主要な目標と、同じタイトルを持つ多くの(この場合はそれほど多くない)ユーザーの目標があります。サイトのアーキテクチャでは、これが当てはまることが要求されます。VARCHARtitle

私はまだこれらの2つのテーブルの間に関係を持つ必要はありませんでした。個々のユーザーの目標から主な目標にリンクしますが、タイトルごとのクエリ(列INDEXにを表示)を使用してリンクします。次に、これら2つのテーブルを関連付ける3番目のテーブルが必要ですが、結果整合性が必要なだけです。sと。の両方の2つの列があります。titleFOREIGN KEYgoal_idusers_goal_id

トリガーはこれを実行する方法ですか?もしそうなら、それはどのように見えるでしょうか?

0 投票する
9 に答える
26533 参照

sql - データベース設計を非正規化する場合

スタック オーバーフローで正規化が広く議論されていることは知っています。以前の議論の多くを読みました。ただし、いくつか追加の質問があります。

少なくとも 100 個のテーブルを持つレガシー システムで作業しています。データベースには、正規化されていない構造、さまざまな異種データを含むテーブル、およびその他の問題があります。私はそれを改善しようとする任務を与えられました。やり直すことはできませんが、既存のスキーマを変更する必要があります。

これまで、私は常に正規化されたデータベースの設計を試みてきました。今質問。上級開発者は、場合によっては正規化できないことを示唆しています。

  1. 時系列データあり。たとえば、製品にリンクする請求書が作成されます。顧客が 1 年後にこの請求書のコピーを要求した場合、元の正確なコピーを作成できなければなりません。製品の価格、名前、または説明が更新された場合はどうなりますか? 年配の男性は、価格やその他の製品情報を請求書テーブルにコピーするよう提案しました。時間の経過に伴う価格の変化を追跡できるように、日付フィールドを持つ productPrice などの別のテーブルを作成する必要があるのではないかと考えています。製品の説明と名前にも同じものが必要でしょうか?複雑そうです。どう思いますか?

  2. データベースは会計システムです。私は会計にあまり詳しくありません。現在、いくつかの要約データが取得され、データベースに保存されています。たとえば、年間の総売上。私のシニア アソシエイトは、会計士は、この値を請求書などから実際に計算されたデータと比較して、アプリケーションが正しく機能していることを確信できるようにすることで、物事が正しいことを確認するのが好きだと言いました。

たとえば、合計が同じではないため、誰かが昨年の請求書を誤って削除したかどうかを現時点で判断できると彼は言いました。彼はまた、これらの合計をその場で計算するのは非常に遅くなる可能性があることも指摘しました。もちろん、データは重複してはならず、必要に応じて常に計算する必要があると言いました。私は、これらのレポートを夜間に生成してキャッシュする SQL Reporting Services またはその他のソリューションを使用することを提案しました。とにかく彼は納得していません。これについて何かコメントはありますか?

0 投票する
7 に答える
12774 参照

sql - フラット テーブルまたは正規化されたデータベースを使用する必要がありますか?

バックエンドに MySQL データベースを使用する現在取り組んでいる Web アプリケーションがあり、先に進む前に自分の状況に何が適しているかを知る必要があります。

簡単に言えば、このアプリケーションでは、ユーザーは任意の数値フィールドを使用して独自のフォームを作成することができ (ユーザーが決定します)、現在、すべてを外部キーでリンクされた 2 つのテーブルに格納しています。私の友人は、物事を「簡単/高速」に保つために、各ユーザーのフォームをフラットテーブルに変換して、ユーザーからのデータのクエリが高速に保たれるようにすることを提案しています (大幅な成長の場合)。

外部キー (インデックスなど) を持つリレーショナル テーブルにすべてをプールして、データベースを正規化する必要がありますか?それとも、ユーザーが作成する新しいフォームごとにフラット テーブルを構築する必要がありますか?

明らかに、フラット テーブルを作成する利点のいくつかは、データの分離 (セキュリティ) であり、クエリの速度が低下します。しかし、真剣に、これからどれだけの利益が得られるでしょうか? 10000 個のテーブルを常に削除、変更、および追加することは本当に望んでいませんが、それが私よりも優れている場合は... 入力が必要です。

ありがとうございました

0 投票する
3 に答える
8719 参照

excel - Excel でコンマ区切りの値を作成します (ピボットテーブルを使用)?

Excel でカンマ区切りの値を生成する方法はありますか (最適にはピボットテーブルを使用します)。次のデータを検討してください。

次のようなテーブルを取得したいと思います。

これはExcelで可能ですか?データは SQL クエリから取得されるため、再帰的な CTE を使用して UDF を記述して計算することもできましたが、これは 1 つのアドホック クエリ用であり、非正規化されたデータを取得するための簡単な方法が必要でした。結局、UDF を書くよりも、これを投稿する方が時間がかかるかもしれませんが...

0 投票する
3 に答える
1357 参照

sql - 名簿データベースの設計:非正規化?

連絡先管理者/名簿のようなアプリケーションを設計していますが、データベースの設計を決定できません。

現在の設定では、住所、電話番号、電子メール、および組織を含む連絡先があります。現在、すべての連絡先プロパティは、連絡先テーブルへのfkを持つ個別のテーブルです。言うまでもなく、連絡先はこれらのプロパティをいくつでも持つことができます。

連絡先をアプリに読み込みたい場合は、これらすべてのテーブルを結合します。関連するテーブルではフィルター、逆引き参照、並べ替えなどが実行されないため、連絡先テーブルの直接プロパティに関連するフィールドをjsonエンコードリストとして保存する方が適切で簡単なソリューションではありませんか?

たとえば、3つのエントリを持つ電話番号テーブルへのfkを使用した連絡先の代わりに、すべての電話番号をエンコードして、連絡先テーブルのフィールドに保存しますか?

どんな洞察も本当にありがたいです!(fyi私はDjangoを使用していますが、それは実際には問題ではありません)

0 投票する
3 に答える
514 参照

database - ユーザーが送信したアイテム名 (およびその同義語) を保存する最良の方法

複数の店舗を持つ電子商取引アプリケーションを考えてみましょう。各ストア オーナーは、自分のストアのアイテム カタログを編集できます。

私の現在のデータベーススキーマは次のとおりです。

注:errorスペルが間違っていることを示します (例: "Ericson")。descriptionおよびテーブルの「グローバル」pictureは、「ローカル」およびテーブルのフィールドによってオプションでオーバーライドできる(店舗の所有者がアイテムに別の画像を提供したい場合)。一意のアイテム名を区別するのに役立ちます (「ジミー ジョーズ チーズ ピザ」と「チーズ ピザ」)item_names descriptionpictureitemscommon

このスキーマの明るい面は次のとおりだと思います。

最適化された検索とシノニムの処理:item_names &item_synonymsテーブルを使用してクエリを実行し、テーブルと結合する必要がある のname LIKE %QUERY%リストを取得できます。(同義語の例:「Sony Ericsson」、「Sony Ericsson」、「X10」、「X 10」)item_name_iditems

オートコンプリート:繰り返しますが、item_namesテーブルへの単純なクエリです。DISTINCT(「Sony Ericsson Xperia™ X10」、「Sony Ericsson - Xperia X10」、「Xperia X10、Sony Ericsson」)の使用を避けることができ、バリエーションの数を最小限に抑えることができます。

マイナス面は次のとおりです。

オーバーヘッド:項目を挿入するときにitem_names、この名前が既に存在するかどうかを確認するためにクエリを実行します。そうでない場合は、新しいエントリを作成します。アイテムを削除するとき、同じ名前のエントリの数を数えます。これがその名前を持つ唯一のアイテムである場合、item_namesテーブルからエントリを削除します (単に物事をきれいに保つためです。誤った提出の可能性を考慮します)。そして、更新は両方の組み合わせです。

奇妙な商品名:店主は、「Harry Potter 1, 2 Books + CDs + Magic Hat」のような文章を使用することがあります。このようなケースに対応するために、これほど多くのオーバーヘッドが発生することには何か問題があります。これがおそらく、次のようなスキーマを使用したくなる主な理由です。

(...クエリできるユーティリティテーブルと一緒にitem_namesitem_synonyms

  • あなたが提案したより良いスキーマはありますか?
  • オートコンプリートのためにアイテム名を正規化する必要がありますか? これはおそらく、Facebook が「学校」、「都市」のエントリに対して行うことでしょうか?
  • 最初のスキーマと 2 番目のスキーマのどちらが検索に適していますか?

前もって感謝します!

参考文献: (1)人の名前を正規化するのは行き過ぎですか? 、(2) DISTINCTの回避


編集:類似した名前で 2 つの項目が入力された場合、これを見た管理者は、[シノニムにする] をクリックするだけで、名前の 1 つが別のシノニムに変換されます。入力された名前が他の名前の同義語であるかどうかを自動的に検出する方法は必要ありません。オートコンプリートがそのようなケースの 95% を処理してくれることを願っています。テーブル セットのサイズが大きくなるにつれて、「シノニムの作成」の必要性は減少します。混乱が解消されることを願っています。


更新:私が何を進めたかを知りたい方へ... 2 番目のスキーマを使用しましたが、 Solrが必要な残りのすべてのタスクを実行する機能を提供してくれることを期待して、item_namesitem_synonymsテーブルを削除しました:

助けてくれてありがとう!

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

database - データを単一のテキストフィールドにシリアル化する-非正規化が行き過ぎですか?

私が現在追求しているこのデータベース設計が健全であるかどうかについて、いくつかの意見が欲しいです。

「Home」というテーブルを作成しているとしましょう。このテーブルには「rooms」というテキストフィールドがあります。このフィールドには、この家にある一連の部屋のシリアル化されたデータがあります。もちろん、私の最初の本能は、このデータを別の「部屋」テーブルに正規化することでした。ただし、過去に過度に正規化されたデータベースでの苛立たしい経験のために、私は自分自身にいくつかの質問をするのをやめました。

  1. 特定の部屋を探す必要がありますか?
  2. 個々の部屋を更新する必要がありますか?
  3. ホームレコードでルームレコードを共有することはありますか?

これらの質問のそれぞれに対する答えは「いいえ」です。部屋の記録はすべて、各ホームに固有のものです。たとえば、データベース内にバスルームがある家の数を調べるためにクエリを実行する必要はありません。データは常にホームの観点から取得されます。ベッドルームとバスルームの数は、検索のためにホームレコードに明示的に保存されます。

そのため、常にRoomsに参加する代わりに、このデータをシリアル化してテキストフィールドにポップするだけで何が害になるのか疑問に思いました。

これは私には非常に理にかなっていますが、健全性チェックを望んでいます。ご入力いただきありがとうございます。

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

data-binding - 書き込み可能なデータグリッドビューへの結合を含む linq-to-entities クエリをどのようにバインドしますか?

この質問は、他の質問と いますが、重複していないようです。そうである場合は、明確にしてください。喜んでマージさせていただきます。

結合を含む linq-to-entities クエリを使用して、書き込み可能な DataGridView にバインドしたいと考えています。モデルは次のとおりです。

代替テキスト

非正規化された DataGridView は、次のようにバインドする必要があります。

代替テキスト

次のコードはバインドしますが、linq-to-entities クエリが匿名型を返すため、読み取り専用の DataGridView になります (この投稿を参照)。非正規化を行うには匿名型が必要だと思うので、私は行き詰まっています。

ここで提案されている解決策も試しましたが、linq-to-sql には適用されますが、linq-to-entities には適用されないようです。bindingsource.datasource を linq-to-entities クエリに設定すると、「パラメーターなしのコンストラクターと初期化子のみが LINQ to Entities でサポートされています」という読み取り例外がスローされます。

アドバイスありがとうございます。

ティム

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

matlab - ベクトルを範囲[-1;1]に正規化/非正規化する方法

ベクトルを範囲に正規化するにはどうすればよいですか[-1;1]

norm関数が速くなるので使いたいです。

また、正規化後にそのベクトルを非正規化する方法を教えてください。