我猜这个问题非常简单。但尽管如此, 例如,我有实体:用户(id,名称),组(id,name),user_group(user_id,group_id)和gallery(id,name,owner_id)。 图库的所有者可以是用户或组。
关系数据库中最好的解决方案是什么?
谢谢!
PS如果有人知道关系代数和模式优化。它会是什么样子?
我在考虑所有者(id,user_id,group_id),但我不知道如何在关系代数方面显示“OR”关系。
答案 0 :(得分:1)
最简单的解决方案是关系Owner(id, user_id, group_id)
,其中可以设置user_id
或group_id
- 使用适当的约束来保护它。
将Group
和User
折叠到一个表中会将数据库中的一些一致性检查拖入应用程序逻辑中:
User
和Group
,则可能需要进行更多调整。答案 1 :(得分:0)
将所有者和群组合并到一个表中。所有者和组只应根据它们在此表中的属性或者在连接此新表与自身的关系表中是否存在行(“是成员”)来区分。
答案 2 :(得分:0)
用户和组之间没有技术差异(只是概念性的)。
将它们放在同一个表(user
)中,并在第二个字段中标记行的类型(组或用户)。
使用应用程序逻辑确保{{1>}表中只有一行类型 group 可能“有子节点”。
答案 3 :(得分:0)
引入新实体OWNER并使其成为GROUP的所有者。然后制作USER和GROUP类别(即“继承”它们)OWNER。
你的ER模型看起来像这样(只显示PK字段):
理论上,有三种主要方法可以在物理数据库中实现一个类别。所有这些都有利有弊,但对于您的模型,解决方案1 可能是最合适的: