2017-06-29 9 views
0

私は以下のようなこのRedditのような関係を持っています。基本的なアイデアは、各ユーザーが多くのコミュニティに参加でき、各コミュニティに多数のブログを書くことができるということです。多くの場合、余分な情報との関係

また、評判などのこのユーザーに関するコミュニティ固有の情報があります。私の質問は、追加情報を関連テーブル(つまりUserCommunities)に入れるのはよい習慣ですか?どうしてなぜ?

ありがとうございます!

enter image description here

+0

あなたのBlogsテーブルにcommunities_idとUserCommunities_Communities_idがあるのはなぜですか?値は同じではありませんか? – k1133

+0

私はこれを何度もやってきましたが、後悔はありません。あなたは別のテーブルに評判を置くことによってどんなことを得ると思いますか? –

+0

@WalterMitty何もありません...私はDB設計にはかなり新しいので、私は –

答えて

0

リレーショナルデータベース設計で考慮二つの基本的な力があります。

  1. データの冗長性や依存を減らしては。 (正規化)
  2. アプリケーションのクエリパターン。 (ユースケース/シナリオ)

正規化部分については十分に文書化されています。詳細についてはwikiまたはthisを参照してください。 データの増加が懸念されている場合や、1つのフィールド値を変更するために複数の列値(データ依存関係)を変更する必要がある場合は、この点を考慮する必要があります。

2番目の部分は、より主観的です。 クエリパターンでクエリ間に何らかのデータが必要な場合、両方のデータを同じテーブルに保存するのに費用がかかりません(スペースに賢明ではない)場合、正規化手法を無視/折り返すことができます。ご例えば

:ユーザーテーブルが自分のイニシャル、住所、好みなどのユーザーに固有のデータを持っていた場合

、その後、別のテーブルとしてそれを持つことができます。離れて評判から、それはポストの数などのデータ、同類などなどの数を持っている場合

同様にユーザコミュニティテーブルのために、それは/別のテーブル

なぜする必要がありますか?

メリットの正規化フォームを参照できます。 :)

あなたのユースケース/クエリパターンが「与えられたユーザーとブログ、ユーザーの評判を教えてください」または同様のものであり、余分なデータがない場合、評判を同じテーブルに保持できます。

なぜ

それはあなたのクエリを簡素化します。テーブルをまたいで結合するのではなく、それほど複雑ではない単純な前方クエリです。

関連する問題