1

音楽の味を共有するWebアプリケーション用のデータベースを設計しようとしています。

私はDb設計/アーキテクチャを行う必要はほとんどなく、SOユーザーから助けを得ることができると思いました。私の質問が、「優れた」Db設計手法の良い例になることを願っています。

参考:ERDは、無料のソフトウェアであるMySQLWorkbenchを使用して作成されました。

これらは私の要件であり、Dbスキーマでそれらをどのように表現したかです

  • ユーザーは資格情報とアカウント/プロファイル(電子メール、fName、lNameなど)を持っています-これはすべてUSER_DETAILSテーブルの下にあります

  • ユーザーはロールを持つことができます&&複数のユーザーが同じロールを持つことができます-したがって、&テーブル間の多対多の関係USER_DETAILSROLE

  • ユーザーは画像を持つことができます-したがって、&テーブル間の1対多の関係USER_DETAILSUSER_IMAGE

  • ユーザーは多くのバッジを持つことができ、複数のユーザーは同じバッジを持つことができます-したがって、&テーブル間の多対多の関係USER_DETAILSBADGE

  • ユーザーのトラックには多くのレピュテーション履歴を含めることができ、レピュテーション履歴は1つの特定のユーザーのトラックとのみ一致します。したがって、&テーブル間の1対多の関係です。USER_DETAILS_TRACKREPUTATION_HISTORY

  • ユーザーは多くのトラックを持つことができ、複数のユーザーは同じトラックを持つことができます-したがって、&テーブル間の多対多の関係USER_DETAILSTRACK

  • ユーザーはトラックごとにタグを持つことができ、複数のユーザーはトラックごとに同じタグを持つことができます-したがって、&テーブル間の多対多の関係USER_DETAILS_TRACKTAG_2

  • トラックはhasTRACKテーブルの下に表示されます

  • トラックには複数のアーティストを含めることができ、アーティストは複数のトラックに含めることができます-したがって、&テーブル間の多対多の関係TRACKARTIST

  • トラックには複数のリリースを含めることができ、リリースには(&通常)複数のトラックを含めることができます-したがって、&テーブル間の多対多の関係TRACKRELEASE

  • リリースには1つのrelease_typeがあり、release_typeは多くのリリースに含まれる可能性があります。したがって、&テーブル間の1対多の関係(リリースタイプはアルバム、EP、LP、シングルなど)RELEASE_TYPERELEASE

  • トラックにはコメントを含めることができます-したがって、&テーブル間の1対多の関係TRACKCOMMENT

  • トラックには複数のタグを含めることができ、アーティストは複数のトラックに含めることができます-したがって、&テーブル間の多対多の関係TRACKTAG_1

TAGテーブルにTAG_1とTAG_2が含まれていることを複製したことに気付いたはずです。USER_DETAILS_TRACK理想的には1つだけですが、テーブルはすでに多対1の関係にTRACKリンクされているため、テーブル間の結合が強すぎるのではないかと心配しています。

中間層でTAG_1とTAG_2の同期を維持する予定です。

の初期ERD図


podiluskaのコメント後の最新の編集

最新のERD図

  1. 私は自分のデータベース設計に関して正しい道を進んでいますか?
  2. 何を変更/改善しますか?

どうもありがとう

4

1 に答える 1

1

コメントで行われた調整は別として、多かれ少なかれそこにあると思います。

Release から Track_ID を削除してトラック内の Release_ID に置き換えるか、TrackRelease テーブルを用意する必要があります - トラックが複数のリリースに存在できるかどうかに応じて、またその逆も同様です。

于 2012-10-26T13:43:50.437 に答える