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