問題タブ [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 投票する
5 に答える
704 参照

php - グループごとに複数のGROUPBY結果を取得するか、個別の連結テーブルを使用します

私はオークションのウェブアプリケーションに取り組んでいます。これで入札の表ができました。この表から、オークションごとに最後の10件の入札を選択します。

これで、次のようなものを使用して最後の入札を取得できることがわかりました。

SELECT bids.id FROM bids WHERE * GROUP BY bids.id ORDER BY bids.created

GROUP BYの結果の金額を設定するのは簡単なことではないことを読みました。実際、簡単な解決策は見つかりませんでした。

しかし、私はこの問題に取り組むためのいくつかの解決策を考え出しました、しかし私はこれをうまくやっているかどうかわかりません。

最初に、このbids_historyを呼び出して新しいテーブルを作成します。このテーブルには、最後のアイテムの文字列を格納します。

例:

bid_id(20,25,40)で使用されている文字列を取得し、これを結合で使用する簡単な方法が見つからなかったため、名前と時刻も保存する必要があります。このようにして、オークションIDに参加するだけで、最新の結果が得られます。

新しい入札が行われると、次の手順が実行されます。

  • 入札に入札を挿入してlastinserteidを取得
  • このオークション商品のbids_history文字列を取得します
    • 文字列を爆発させる
    • 新しい値を挿入します
    • 3つ以上あるかどうかを確認します
    • 配列を内包し、文字列を再度挿入します

これはすべて私にはあまりよくない解決策のようです。どちらに行けばいいのか本当にわかりません。これは入札が多いウェブサイトであることに注意してください。オークションアイテムごとに最大15.000の入札が可能です。たぶん、この量のために、グループ化と注文は良い方法ではありません。私が間違っている場合は訂正してください。

オークションが終了したら、入札テーブルをクリーンアップしてすべての入札を削除し、別のテーブルに保存します。

誰かが私がこの問題に取り組むのを手伝ってくれませんか!

そして、あなたが行ったことがあるなら、読んでくれてありがとう。

編集

私が使用するテーブルは次のとおりです。

クエリの結果として私が欲しいもの:

つまり、オークションごとの最新の入札であり、番号、3または10で選択します

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

mysql - List の値を配列として MYSQL 列に格納したいと考えていました。ベストプラクティスは何ですか?

共通の登録フィールドを持つ登録フォームと、「サービス」という見出しが付いた 2 つの複数選択リストがあります。フォームデータをデータベースにテーブルに保存したかった。現在、「registrations」というテーブルは 1 つしかありません。また、「registration_services」という名前の別の関係テーブルを作成して、regid と serviceid を保存する必要があるかどうかを考え直しています。

このテーブルには少なくとも 10000 レコードが必要です。同じテーブルの 1 つの列に複数の選択リストの値を格納した方がよいでしょうか?

それとも、別のテーブルを作成し、親子関係として保存しますか?

ベストプラクティスは何ですか?

アドバイスしてください ありがとう SIA

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

sql - Table Design For SystemSettings, Best Model

Someone suggested moving a table full of settings, where each column is a setting name(or type) and the rows are the customers & their respective settings for each setting.

ID | IsAdmin | ImagePath
------------------------------
12 | 1          | \path\to\images
34 | 0          | \path\to\images

The downside to this is every time we want a new setting name(or type) we alter the table(via sql) and add the new (column)setting name/type. Then update the rows(so that each customer now has a value for that setting).

The new table design proposal. The proposal is to have a column for setting name and another column for setting.
ID | SettingName | SettingValue
----------------------------
12 | IsAdmin        | 1
12 | ImagePath   | \path\to\images
34 | IsAdmin        | 0
34 | ImagePath   | \path\to\images

The point they made was that adding a new setting was as easy as a simple insert statement to the row, no added column.

But something doesn't feel right about the second design, it looks bad, but I can't come up with any arguments against it. Am I wrong?

0 投票する
5 に答える
132 参照

c# - SQL Server 2008: これに制約を使用できますか?

UserCityおよびの3 つのフィールドを持つテーブルがありCountry、フィールドの1 つだけNULLが常に非である必要があります。これに SQL 制約を使用できますか、それとも自分のしていることを再考する必要がありますか?

シナリオは、ユーザー、都市、または国に添付できるドキュメントをデータベースに含める必要があるというものです。したがって、このテーブルの行には、ユーザー、都市、または国のいずれかのドキュメントが 1 つだけ含まれています。ただし、どのエンティティに「添付」されているかに関係なく、すべてのドキュメントも検索できる必要があります。

JOIN代わりに 3 つの異なるテーブルを使用しない理由は、3 つの場所すべてでドキュメントを検索するときに 3 つのテーブルを使用する必要がないようにしたいからです。ここで使用しようとしている種類の非正規化によってパフォーマンスが向上すると想像していますが、よくわかりません。

考え?

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

mysql - 非正規化のために MySQL でパフォーマンスを表示します

私は現在、真に最初の PHP アプリケーションを作成しています。MySQL ビューを適切にプロジェクト/設計/実装する方法を知りたいです。

私の特定のケースでは、ユーザーデータは(データベースの正規化の結果として)複数のテーブルに分散されており、ビューを使用してデータを1つの大きなテーブルにグループ化することを考えていました:

このようにして、PHP アプリからビューのデータを簡単に使用できますが、これがパフォーマンスにどの程度影響するかはよくわかりません。

例えば:

ビューのデータをフィルタリングする正しい方法ですか、それともビュー自体を作成する前にフィルタリングする必要がありますか? (これは、ユーザーのリストと、ユーザーをロールでフィルタリングする機能を持たせるために必要です)。

編集

具体的に私が取得しようとしているのは、3 つのテーブルを 1 つに非正規化することです。私の解決策は正しいですか? ウィキペディアの非正規化を参照してください

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

sql - この問題に対する SQL クエリの設計を手伝ってください

代替テキスト

特定の名前について、この人が住んでいた 3 つ以上の都市に住んでいた他の名前を取得したいと考えています。

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

php - 特定の MYSQL 問題に対する非正規化の代替手段は?

私は非常に具体的な最適化の問題に直面しています。

現在、4 つの正規化されたデータ テーブルがあります。

毎秒、おそらく数千のユーザーが、AJAX を使用してこれらのテーブルから最新情報を取得します。

問題は、彼らが必要とするデータのサブセットを比較的簡単に予測できることです...それらの4つの正規化されたテーブルの最新の100程度のエントリ。

私は非正規化を研究してきました...しかし、おそらくもっと簡単な解決策があると感じています。

私はどういうわけか毎秒1つのSQLクエリを実行して必要な情報を要約し、それを一時キャッシュテーブルに保存してから、すべてのユーザークエリをこれから引き出すことができると考えていました. これにより、4 つのテーブルの複雑な結合を 1 回だけ実行できるようになり、そこからユーザーはキャッシュされたテーブルから単純なルックアップを実行するだけで済みます。

これが実現可能かどうかは本当にわかりません。これまたは他の提案に関するコメントは大歓迎です。

ありがとう!

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

database - 非正規化データベース

Star Schema Benchmarkを調べていたのですが、SSB からすべてのテーブルを非正規化することは可能でしょうか?

したがって、データベースのサイズは大幅に増加しますが、パフォーマンスが向上する可能性があります。そうですか?出来ますか?

私の貧弱な英語に感謝し、申し訳ありません。

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

sql - SQL Server の非正規化に関する質問 - ユーザー データを 1、3、または 21 のテーブルに保存しますか?

私たちの Web サイトのセクションでは、ユーザーに自分自身 (「プロファイル」) に関する 20 の多肢選択式の質問をするよう求めています。Web サイトのこの部分は頻繁に表示され、ときどき更新されます。この Web サイトでは大量のトラフィックが発生することが予想されるため、パフォーマンスの問題に備えて準備することを検討しています。

これをDBに保存するために私が見ることができる3つの方法は次のとおりです。

  1. 質問ごとに 1 つのテーブルを作成します。各テーブルには QuestionID と Answer があり、次にプロファイル データを格納する CustomerInfo テーブルがあり、外部キーが質問にマップされています。

  2. Question、Question_Type、および Answers テーブル。これらの構造にすべてを詰め込みます。ここでの私の懸念は、特にプロファイルを更新するために必要な 20 ほどの挿入です。これは、トラフィック量が多い場合にパフォーマンスに影響を与えますか?

  3. 非正規化された単一のテーブル、質問ごとに 1 つのフィールド、HTML や C# オブジェクトに回答コードをハードコーディングします。

私は#2または#3に傾いています。最善の解決策は何だと思いますか?

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

java - 非正規化された休止状態をマップする

品質のリストを含む Summary クラスがあります。Quality には String 名と int 値が含まれます。このデータは、Summary と Quality の両方について、非正規化された db 構造 (1 つのテーブルのみ) に格納されます。

品質表:

id, somefileds, qualityname1, qualityvalue1, qualityname2, qualityvalue2, qualityname3, qualityvalue3

品質の名前と値のペアごとに、Summary クラスに新しい Quality オブジェクトを挿入する必要があります。

これを休止状態でマップする方法(xml休止状態マッピング)?