問題タブ [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.
mysql - 住所、都市、国のデータに関する正規化の質問
現在、世界のすべての主要都市、それらの国に対応する各地域/州、およびそれらの州/地域にある各都市に関する情報を格納する 3 つのテーブルがあります。
現在、データベースには、住所、郊外、都市、州/地域、国というまったく同じ5つの列を必要とするユーザーまたは組織テーブルなど、約6つの他のテーブルがあります。したがって、これらの 5 つの情報を格納する「場所」テーブルを使用するのが「良い」正規化プラクティスであるかどうか疑問に思っていました。その後、Users または Organizations テーブルには、参照先の location_id が含まれます。
良いアイデアですか、それとも悪いアイデアですか?また、6 つのテーブルのそれぞれに同じ 5 つの列を含めるのではなく、home_phone、business_phone、mobile_phone、email_address を含む同じ原則で「Contacts」テーブルを使用することも検討しています。
アドバイスをいただければ幸いです。どうもありがとう!
python - Django: post_save シグナルで元の (変更されていない) インスタンスにアクセスする方法
パフォーマンスを向上させるためにデータの非正規化を行い、ブログ投稿が受け取った投票の合計を Post モデル内に入れたいと考えています。
もちろん、Post.rating
値を実際に保つ必要があります。通常はデータベース トリガーを使用しますが、今回はpost_save
(データベースの処理時間を短縮するために) シグナルを送信することにしました。
保存前のインスタンス値にアクセスするにはどうすればよいですか? データベーストリガーでは、これOLD
をNEW
事前定義しますが、post_save シグナルにこのようなものはありますか?
アップデート
マークの答えに基づく解決策:
database-design - 非正規化パターンの「標準名」とは何ですか?
2つのデータベースデザインパターンの標準名を知りたいのですが、純粋主義者の場合は「問題」になる可能性があります。
それらの状況/非正規化をどのように呼びますか?私は自分自身のために「ミラーリングされた属性」と「フリックされた外部キー」を使用していますが、誰も私を理解しないと確信しています:)。とにかく状況は単純です:
1)「親子」関係にある2つのエンティティがあり、子エンティティには外部キー属性だけでなく、親エンティティの他の「バックアップ」属性もあります。これは、アドレスエンティティにstreetIdだけでなく、streetNameも含まれている場合に、ストリートリストにストリートがない場合(またはレガシーデータの場合によくあること)をサポートする場合があります。
2)子エンティティには、2つのフィールドで構成される「外部キー」が含まれます。1つは「親テーブル」を識別し、もう1つは「親テーブルのキー値」です。つまり、最初に解釈し、それをフィルタリングすることで、どのテーブルを結合する必要があるかがわかります。もちろん、この関係の一貫性はdbmsレベルでは維持されませんが、これは私が実際に時々目にする一種の「親子関係」です。
sql - 非正規化ルールを定義する DDL?
私は何年もリレーショナル データベースの仕事をしてきましたが、最近は Cassandra/Redis の領域に移行しました。NoSQL は私たちがやっていることに意味があるので、それで問題ありません。
今日、Cassandra 列ファミリーの定義に取り組んでいるときに、ある疑問が浮かびました。リレーショナル データベースでは、データベース エンジン自体が結果として生じる一貫性の問題をネイティブに管理できるように、DDL で非正規化ルールを定義できないのはなぜですか。言い換えれば、リレーショナル データベース プログラマーがパフォーマンス目標を達成するために非正規化するとき、なぜ専用 SQL を介して一貫性を維持する必要があるのでしょうか?
たぶん、私が行方不明になっていることが明らかな何かがありますか?このような提案がばかげている理由は何かありますか?なぜなら、この機能を持っていると非常に便利なように思えるからです.
編集:
これまでのフィードバックに感謝します。私はまだ答えられていない質問を抱えているように感じます (おそらく、うまく表現されていないためでしょう)。マテリアライズド ビューは、非正規化されたデータに対してエンジン管理の一貫性を提供しようとしていることを理解しています。ただし、基になるテーブルが変更されてもすぐには更新されないことを理解しています。これが本当なら、それはエンジンが本当にそうではないことを意味します非正規化に起因する一貫性の問題の管理...少なくとも書き込み時ではありません。私が理解しているのは、複雑なリレーショナル モデルに対して読み取り負荷の高いシステムをスケーリングするときに、真の機能豊富なエンジン管理の非正規化を使用しない正規化されたデータ構造は、リレーショナル データベース エンジンを妨害するということです。マテリアライズド ビューのリフレッシュ レートを調整することは、Cassandra などの NoSQL エンジンによって提供される調整可能な「結果整合性」に等しいというのは本当だと思います。エンジンがどれだけ効率的にマテリアライズド ビューを同期できるかを調べる必要があります。NoSQL オプションと比較して実行可能であると見なされるためには、ビューの同期にかかる時間が、追加/更新された行の数に比例して増加する必要があります。
とにかく、もう少し考えて再編集します。うまくいけば、想像上の DDL の代表的な例がいくつかあります。
sql-server - 頻繁にアクセスされるレポートテーブルを定期的に再構築するにはどうすればよいですか?
準備されたレポートテーブルを更新するには、約5〜10分かかります。このテーブルを常に更新したいと思います(おそらく15分ごとに1回、または継続的に)。
このレポートテーブルは非常に頻繁に(1分間に何度も)クエリを実行しますが、これを長時間維持することはできません。データが15分前であれば問題ありません。
テーブルを削除して再作成することはできません。テーブルの内容を削除して再作成できません。
2つのテーブルを交換する(もう一方を構築するときに一方から読み取る)など、使用する必要のある手法はありますか、それともこの5〜10分のプロセスを大規模なトランザクションに配置しますか?
java - 非正規化されたBeanをHibernateで挿入することは可能ですか?
私は次のような豆を1つ持っています:
と
標準のHibernate構成構成を想定すると、次のような挿入が発生する可能性があります
その後
非正規化されたテーブルがある場合、次のように両方のエンティティを格納するプレーンテーブルに挿入を取得できる可能性はありますか?
sql - 複数のテーブルに対する一意の制約
これらのテーブルがあるとしましょう:
p>
Child
すべての行に対して、最大で 1 つの値をChild
参照するように一意の制約を作成することは可能ですか? 別の言い方をすれば、上記のテーブルの結合に重複がないように一意の制約を作成できますか? 私が見つけたすべてのデータベースの文法は、制約ごとに 1 つのテーブルに結び付けられているように見えますが、それは私の想像力の欠如かもしれません。(もちろん、 onを含めるための非正規化は 1 つの解決策です。)Parent
aId
aId
aId
Child
mysql - 非正規化されたデータベーステーブルの更新
Ruby on Rails3.0.7とMySQL5を使用しています。私のアプリケーションには、TABLE1とTABLE2などの2つのデータベーステーブルがあり、パフォーマンス上の理由から、TABLE2の一部のデータを非正規化して、その1つでTABLE1の値を繰り返しています。ここで、TABLE1で、これらの関連する値のいくつかを更新する必要があります。もちろん、TABLE2の非正規化された値も適切に更新する必要があります。
これらの値をパフォーマンスの高い方法で更新するにはどうすればよいですか?つまり、TABLE2に多くの値(1.000.000以上)が含まれている場合、両方のテーブル(テクニック、プラクティスなど)を更新し続けるための最良の方法は何ですか?
データベーステーブルの更新にかかる時間中に何が起こる可能性がありますか?たとえば、ユーザーは、これらの非正規化された値を含むいくつかのWebサイトページにアクセスする際に問題が発生する可能性がありますか?もしそうなら、それらは何ですか、そして私はどのように状況に対処できますか?
mysql - クエリで非正規化された日付より上のすべてを除外する
データを非正規化しました(日付が年、月、日、時間の列に分割されています)が、特定の日付より前のすべてをクエリする方法がわかりません。
これは動作しません:
これは、実際にはすべてのレコードを必要に応じて「グループ化」するわけではないため、(たとえば)常に0時間から1時間までの日付になります。