音楽の味を共有するWebアプリケーション用のデータベースを設計しようとしています。
私はDb設計/アーキテクチャを行う必要はほとんどなく、SOユーザーから助けを得ることができると思いました。私の質問が、「優れた」Db設計手法の良い例になることを願っています。
参考:ERDは、無料のソフトウェアであるMySQLWorkbenchを使用して作成されました。
これらは私の要件であり、Dbスキーマでそれらをどのように表現したかです
ユーザーは資格情報とアカウント/プロファイル(電子メール、fName、lNameなど)を持っています-これはすべて
USER_DETAILS
テーブルの下にありますユーザーはロールを持つことができます&&複数のユーザーが同じロールを持つことができます-したがって、&テーブル間の多対多の関係
USER_DETAILS
ROLE
ユーザーは画像を持つことができます-したがって、&テーブル間の1対多の関係
USER_DETAILS
USER_IMAGE
ユーザーは多くのバッジを持つことができ、複数のユーザーは同じバッジを持つことができます-したがって、&テーブル間の多対多の関係
USER_DETAILS
BADGE
ユーザーのトラックには多くのレピュテーション履歴を含めることができ、レピュテーション履歴は1つの特定のユーザーのトラックとのみ一致します。したがって、&テーブル間の1対多の関係です。
USER_DETAILS_TRACK
REPUTATION_HISTORY
ユーザーは多くのトラックを持つことができ、複数のユーザーは同じトラックを持つことができます-したがって、&テーブル間の多対多の関係
USER_DETAILS
TRACK
ユーザーはトラックごとにタグを持つことができ、複数のユーザーはトラックごとに同じタグを持つことができます-したがって、&テーブル間の多対多の関係
USER_DETAILS_TRACK
TAG_2
トラックはhas
TRACK
テーブルの下に表示されますトラックには複数のアーティストを含めることができ、アーティストは複数のトラックに含めることができます-したがって、&テーブル間の多対多の関係
TRACK
ARTIST
トラックには複数のリリースを含めることができ、リリースには(&通常)複数のトラックを含めることができます-したがって、&テーブル間の多対多の関係
TRACK
RELEASE
リリースには1つのrelease_typeがあり、release_typeは多くのリリースに含まれる可能性があります。したがって、&テーブル間の1対多の関係(リリースタイプはアルバム、EP、LP、シングルなど)
RELEASE_TYPE
RELEASE
トラックにはコメントを含めることができます-したがって、&テーブル間の1対多の関係
TRACK
COMMENT
トラックには複数のタグを含めることができ、アーティストは複数のトラックに含めることができます-したがって、&テーブル間の多対多の関係
TRACK
TAG_1
TAGテーブルにTAG_1とTAG_2が含まれていることを複製したことに気付いたはずです。USER_DETAILS_TRACK
理想的には1つだけですが、テーブルはすでに多対1の関係にTRACK
リンクされているため、テーブル間の結合が強すぎるのではないかと心配しています。
中間層でTAG_1とTAG_2の同期を維持する予定です。
podiluskaのコメント後の最新の編集
- 私は自分のデータベース設計に関して正しい道を進んでいますか?
- 何を変更/改善しますか?
どうもありがとう