私は「投稿」の表を持っており、各投稿の評価を追跡したいと思います。通常、私は実際の評価データを保持する別の "評価"テーブルを参照する同じテーブルにint値を持つ評価フィールドを追加します。その評価フィールドを削除し、postIDに基づいてレーティングテーブルからレーティングを直接呼び出しても問題はありませんか?投稿テーブルはレーティングを直接参照することはありませんが、レーティングテーブルはポストIDを参照します。どちらの方がより良い/正しいですか。 tia関連フィールドをdbテーブルに含める場合とそうでない場合
答えて
あなたの投稿テーブルに評価フィールドを直接入れる必要があります。それはnormalizationの質問です。機能的な依存関係がないため、その値を分けても何も勝てません。
まれに、このようなフィールドを別のテーブルとして追加することがあります。たとえば、評価値を既存のテーブルに追加する必要があり、何らかの理由で新しい列を追加できない場合などです。
また、行が非常に大きく、非常に頻繁に変更される場合は、評価値が頻繁に変更される間にパフォーマンスを得ることができます。
しかし、あなたのケースはどちらのカテゴリにも該当しないとは言いません。ポストテーブルに保持してください。
いくつかの一般的な状況を要約します。
Posts
========
PostId Ratings
Text ==========
RatingId ====> RatingId
RatingName
使用このあなたは、このような、「良い」「平均」、および「低い」などの可能性の評価値のセットを持っており、すべての記事がこの値を共有する場合。 RatingValueはidで識別される文字列になります。
評価値が単純な数値の場合は、投稿テーブルにその値を含めます。それはおそらくあなたのポイントです。 なぜ格付け名の文字列ではなく、整数の格付け値を含めるのですか?違いは次のとおりです。すべての値は法定格付けであるため、整数評価を含める必要があります。これは文字列の評価には当てはまりません。限定された文字列だけが法定格付けを表すため、それらを別のテーブルに移動する必要があります。あなたがポストごとに複数の評価をお持ちの場合は
Posts
===========
PostId
Text
RatingValue
は、次のことが可能に評価の限定セットのために行くための方法です。
Posts PostRatings
======== =========== Ratings
PostId <==== PostId ===========
Text RatingId ===> RatingId
RatingName
整数定格の場合、ポスト定格テーブルに戻します。自然な主キーがないため、人工主キーが必要な場合は追加する必要があります。
PostRatings
Posts ==============
======== [PostRatingId]
PostId <==== PostId
Text RatingValue
あなたはユーザーとの評価を関連付け、あなたは再び自然主キーを取得し、ユーザーごとに与えられた後に1つだけの評価を許可した場合。
Posts PostRatings
======== =========== User
PostId <==== PostId ===========
Text UserId ===> UserId
RatingValue Name
あなたはちょうど良いデータベースデザインについて啓蒙されたと思います。 2番目のアプローチは正しいですが、レーティングテーブルにはPostsテーブルを参照する外部キーPostIdがあります。
最初のアプローチが実際にどのように機能するかはわかりませんが、評価表の複数の行を参照する投稿テーブルに単一の評価フィールドがありますか?あなたのレーティングには一意ではない参照がありますか?いずれにしても、それは良い練習ではなく、正規化を読み、あなたはそのアイデアを得るでしょう。
- 1. GraphQLクエリ:NULLでない場合にのみフィールドを含める
- 2. キーが存在する場合:更新を、そうでない場合:連想
- 3. CUDAと場合とそうでない場合
- 4. Pythonの場合とそうでない場合の違い
- 5. HTMLを含む場合とそうでない場合がある小包を扱う
- 6. アクチベータクラス/ "Bundle-Activator"がプラグインに必要な場合とそうでない場合
- 7. Python:nullの場合は0、そうでない場合は1
- 8. DBフィールドにデータが含まれている場合にブール値を返す
- 9. DBフィールドが含まれていて、ASP.NETで&と表示された場合
- 10. PyMongo値がNaNでない場合にのみ、ドキュメントにフィールドを含めます
- 11. リアクションネイティブ - そうでない場合null null
- 12. 、そうでない場合は、一部
- 13. そうでない場合や文
- 14. 変数がそうでない場合
- 15. 私はテーブルを持っている場合、それはそう
- 16. ヘルパーメソッドをモデル(MVC)に含める場合
- 17. foo.cppにfoo.hを含める場合
- 18. MongoDB-存在しない場合は挿入、そうでない場合は
- 19. フィールドがnullでない場合はインクリメンタルな数値を連結するSQLクエリー、そうでない場合は自動インクリメント
- 20. Jquery関数の場合とそうでない場合の書き込み方が良い
- 21. cakephpテーブルにない場合は新しいフィールドを作成
- 22. 場合とそうでない目に見える形
- 23. UPDATEレコード(存在する場合)。そうでない場合はOracleのINSERT
- 24. テーブルの並べ替えで、列がある場合とない場合の両方の行がある場合
- 25. MySQLのクエリのフィールドは、関連テーブルに存在しない場合でも、戻り相談は
- 26. Rails Observers - Railsでオブザーバを使用しない場合とそうでない場合
- 27. のTeradata:フィールドがnullでない場合、
- 28. 更新フィールドがNULLでない場合
- 29. 異なるテーブルの場合
- 30. awsラムダ関数を使用しない場合と使用しない場合
実際の構造は何ですか?投稿ごとに1つの評価?投稿ごとに複数の評価がありますか?そして評価はどうですか?コメントとスコア、閉じた値のセット、たとえば1〜5つ星「正しい」デザインはそれに依存します。 –
頻繁に変更されるポストごとの単一のint値。 – zsharp
それから私は私の答えで正しかった。ポストテーブルの評価を保持してください。まれなケースがあります。それを別のテーブルに移動することをお勧めしますが、間違いないはずです。 –