0

ダウンロードサイトのようなデータベースを設計する必要があります。ユーザー、各ユーザーがダウンロードしたプログラムを追跡し、ユーザーがそのプログラムを評価+コメントできるようにしたい。このデータベースから必要なもの-プログラムの平均評価を取得し、プログラムのすべてのコメントを取得し、正確にどのプログラムを知っているか誰がダウンロードしたか(各プログラムが何回ダウンロードされたかは気にしないが、各ユーザーがどのプログラムをダウンロードしたかを知りたい)、多分各プログラムのコメント数とそれについてのこと(これは非常に小さなプロジェクトですシンプルにしておきたい個人的な使用)私はこれらのエンティティを思いつきます-

ユーザー(uid、unameなど)

プログラム(pid、pname)

そして、次の関係-

UserDownloadedProgram(uid、pid、timestamp)

UserCommentedOnProgram(uid、pid、commentText、timestamp)

UserRatedProgram(uid、pid、rating)

私がこのように選んだ理由-関係(ユーザーのダウンロード、ユーザーのコメント、レート)は多対多です。ユーザーは多くのプログラムをダウンロードし、プログラムは多くのユーザーによってダウンロードされます。コメントについても同じことが言えます(ユーザーが多くのプログラムにコメントし、プログラムが多くのユーザーによってコメントまたは評価されます)。私の知る限り、ベストプラクティスは、1対多の3番目のテーブル(リレーションシップテーブル)を作成することです。。このデザインでは、平均的な評価とコメントの取得は、結合クエリなどによって行われると思います。私はデータベース設計の初心者ですが、ベストプラクティスを順守しようとしています。この設計は多かれ少なかれ大丈夫ですか、それとも何かを見落としていますか?

私は間違いなく他の可能性を考えることができます-多分コメントや評価はそれ自体がエンティティ(テーブル)であり、関係は3つのエンティティ間にあります。そのメリット/デメリットが何であるかはよくわかりません。コメントや評価はあまり気にしないので、適切な場所に表示して維持したいだけです(必要に応じて削除してください)。彼ら自身が実体になったほうがいいかどうかわかりますか?

何かご意見は?

4

2 に答える 2

0

独自の ID を持つダウンロードのエンティティを作成します。ダウンロード ステータスを取得したり、1 人のユーザーに対して同じプログラムを複数回ダウンロードしたりすることができます。ダウンロードを注文などに関連付ける必要がある場合があります..

于 2013-01-19T11:40:35.683 に答える
0

正規化のルールに従って、新しいエンティティを作成します。コメント用に追加の (別の) テーブルを作成する特別な理由はありません。既に 1 つあるからです。誰がコメントを作成し、コメントがどのプログラムに適用されたかは、コメントの本格的な属性です。これらの関係 (コメント テーブルから見ると多対 1) を表す外部キーは、配置した場所に属します。

あなたが提案した表は、ベスト プラクティスに従って受け入れられる第 3 正規形です。トランザクションベースでデータを追跡しているように見えることを付け加えておきます(つまり、イベントが発生したときにイベントを記録します)。詳細な情報に基づいて、いつでもやりたいことを理解できるので、それも良い習慣です。

ダウンロード数またはコメント数の計算は、クエリに適用される外部キーのフィルターを使用してSQL 集計関数where pid=1234を使用するという単純な問題です。

于 2013-01-19T12:58:23.893 に答える