0

掲示板の速度を上げたい。テーブルからデータを取得しeventます。この時点で、eventsMySQLテーブルは次のようになります

id | event_type | who_added_id | date

eventテーブルには、特定のイベントに関する情報を含む1つの行を格納します。ユーザーAが新しい通知を要求するたびに、クエリはテーブルを実行し、ユーザーBによって追加された通知がユーザーに適しているかどうかを確認します(同じグループのメンバーである友人である必要があります)。eventsかさばるクエリのためにテーブルの読み込みが遅くなり、テーブルが大きくなりました。このデザインを完全に変更し、1つのイベント行を追加してから、ユーザーのイベントが適切かどうかを比較する代わりに、関心のあるユーザーと同じ数の行を追加することを考えています。次のようにテーブルevents構造を変更します。

id | event_type | who_added_id | forwho_id | date

ここで、ユーザーBが他の50人のメンバーに関心のあるイベントを作成する場合、同じ情報で50行を作成し、「forwho_id」フィールドにこの通知を受け取る必要がある50人のメンバーについて言及します。クエリがはるかに単純になり、検索にかかる時間が短縮されると思います。どのように考えますか:1。これは、このような種類のデータを保存するための優れたアプローチですか、それとも重複データを回避する必要がありますか?events2.関心のあるユーザーの数が50人ではなく、数百人になる場合、テーブルはどのように動作すると思いますか。

これを読んでくれてありがとう、そして私が自分自身を理解できるようにしたことを願っています。

4

1 に答える 1

0

複製されたデータは「悪い」ものではなく、「絶対に避けられる」ものでもありません。

「悪い」とは、制御されていない冗長性と、論理データモデルが第3正規形でない場合に発生する種類の問題です。実装が論理データモデルから逸脱し、パフォーマンスに冗長性が導入されることは許容され、期待されます。

改訂されたデザインは、ニーズに適しているように見えます。

于 2013-01-27T00:55:39.153 に答える