1
2つの可能な所有者/親タイプを持つエンティティのデータベーススキーマ?
私はSequelizeをORMとしてPostgreSQLを使用しています。 1つのタイプがありUserます。2番目のタイプはGroupで、GroupMembershipsテーブルを介して任意の数のユーザーを関連付けることができます。Userは、任意の数のを所有することもできGroupます。 3番目のタイプはPlaylist、UserORまたはaのいずれかに属することができgroupます。このタイプのスキーマを設計して、1つのタイプの所有者またはいずれかのタイプの所有者を持つことができる最善の方法は何ですか? 最初のパスでは両方の関連付けを作成しましたが、一度に1つだけ入力しました。これは機能する可能性がありますが、ハックに見え、クエリを困難にします。 追加情報 コメントを介してMDCCLによって投稿された説明要求に対する私の応答は次のとおりです。 (1)プレイリストが特定のグループによって所有されている場合、このプレイリストは、そのグループのメンバーである限り、1 対多のユーザーに関連していると言えますか? これは技術的には正しいと思いますが、この1対多の関連付けは明示的には存在しません。 (2)では、特定のプレイリストを1 対多のグループが同時に所有することは可能ですか? いいえ、をPlaylist1対多で所有することはできませんGroups。 (3)特定のプレイリストを1 対多のグループ、およびそのようなグループのメンバーではない1 対多のユーザーが所有することは可能ですか? いいえ。(2)のように、1対多のto が存在しPlaylistてGroupはならないためです。さらに、Playlistがによって所有されてGroupいる場合、は所有していませんUser。逆も同様です。一度に1人の所有者のみ。 (4)グループ、ユーザー、プレイリストを一意に識別するために使用されるプロパティは何ですか? それぞれに代理主キー(id)と自然キー(主ではない)があります。これらはslug、GroupおよびPlaylist、およびにusername対応していUserます。 (5)特定のプレイリストで所有者が変更される可能性はありますか? 私はこれが機能であることを計画していませんが(少なくとも最初は)、これは仮説的に発生する可能性があります。 (6)Group.SlugおよびPlaylist.Slug属性の意味は何ですか?それらの値は、主キーとして定義されるのに十分安定していますか、それとも頻繁に変更されますか?これら2つのプロパティの値は、User.Usernameとともに一意である必要がありますか? これらslugのは、固有の小文字のハイフン付きのバージョンであり、それぞれのエンティティのtitleです。たとえばgroup、title「テストグループ」を含むa は「テストグループ」を持ちslugます。重複には増分整数が追加されます。これは彼らのtitle変化がいつでも変わるでしょう。私はそれが彼らが素晴らしい主キーを作成しないことを意味すると思いますか?はい、slugsそしてusernames、それぞれのテーブルにユニークです。