我正在使用带有Sequelize的 PostgreSQL作为我的 ORM。
我有一种类型,User
. 第二种类型是Group
,它可以通过一个GroupMemberships
表关联任意数量的用户。User
s 也可以拥有任意数量的Group
s。
我的第三种类型 ,Playlist
可以属于 aUser
或 a group
。为这种类型设计模式的最佳方法是什么,以便它可以拥有一种类型的所有者或任何一种?
我的第一遍创建了两个关联,但一次只填充了一个。这可能可行,但看起来很hacky并且使查询变得困难。
附加信息
以下是我对 MDCCL 通过评论发布的澄清请求的回应:
(1) 如果一个播放列表属于给定组,可以说这个播放列表与一对多用户相关,只要他们是该组的成员,对吗?
我相信这在技术上是正确的,但是这种一对多的关联并不明确存在。
(2) 那么,一个特定的播放列表是否可以同时由一对多的组拥有?
不, a 不可能Playlist
由 one-to-many 拥有Groups
。
(3) 特定播放列表是否可以由一对多组拥有,同时由不是该组成员的一对多用户拥有?
不,因为如(2)中的一对多 from Playlist
toGroup
不应该存在。此外,如果 aPlaylist
由 a 拥有,Group
则它不属于 a User
,反之亦然。一次只有一个所有者。
(4) 用于唯一标识组、用户和播放列表的属性是什么?
它们每个都有一个代理主键 ( id
) 和一个自然键(虽然不是主键)。这些slug
是Group
和Playlist
,和username
。User
(5) 特定播放列表是否会发生所有者更改?
尽管我不打算将其作为一个功能(至少最初是这样),但我认为这可能会发生。
(6) Group.Slug和Playlist.Slug属性是什么意思?它们的值是否足够稳定,可以定义为主键,还是经常更改?这两个属性的值以及User.Username必须是唯一的,对吗?
这些slug
s 是其各自实体的唯一、小写、连字符版本title
。例如,group
带有title
“测试组”的 a 将具有slug
“测试组”。重复项附加了增量整数。这将随时改变他们的title
变化。我相信这意味着他们不会做出很好的主键?是的,slugs
并且usernames
在各自的表格中是独一无二的。