Ruby on rails Rails:从其他表合成集合成员

Ruby on rails Rails:从其他表合成集合成员,ruby-on-rails,ruby,activerecord,ruby-on-rails-6,database-normalization,Ruby On Rails,Ruby,Activerecord,Ruby On Rails 6,Database Normalization,我不确定我是否使用了上述正确的术语,但我将描述我希望做的事情,我希望有人能向我推荐最佳实践 因此,我正在使用基于组的权限/所有权设置一个应用程序(rails 6)。因此,一个文档可能是可编辑的,甚至可能属于一个组:WorkingGroup(在DB中定义,不是静态的)。但是,类似地,文档可能由用户拥有 为了简化逻辑,我希望每个用户都是组用户名的唯一成员,这样,我的应用程序的其余部分就可以假设只有组拥有文档,而不是让用户通过多态关联拥有文档,当用户拥有文档时,只使用只包含该用户的组。但在用户创建时同

我不确定我是否使用了上述正确的术语,但我将描述我希望做的事情,我希望有人能向我推荐最佳实践

因此,我正在使用基于组的权限/所有权设置一个应用程序(rails 6)。因此,一个文档可能是可编辑的,甚至可能属于一个组:WorkingGroup(在DB中定义,不是静态的)。但是,类似地,文档可能由用户拥有


为了简化逻辑,我希望每个用户都是组用户名的唯一成员,这样,我的应用程序的其余部分就可以假设只有组拥有文档,而不是让用户通过多态关联拥有文档,当用户拥有文档时,只使用只包含该用户的组。但在用户创建时同时向users表和groups表中添加一条记录似乎违反了关于DB规范化的规则。我是说那是重复数据

那么,设置代码的最佳方法是什么,这样我就可以发出一个find命令,询问所有用户组:foouser所在的组,并返回一个集合,其中包括与foouser所属的组表中的每个条目对应的组对象,以及与具有foouser成员资格的foouser组对应的合成组对象


我曾考虑尝试使用STI使user类成为group类的实例,但这似乎是错误的。当然,正确的解决方案是让active record以某种方式使用users和groups表来查找组,并以某种方式从users表创建一个group对象,但我不确定如何进行设置。我相信这一定是一个已解决的问题,那么最佳做法是什么?

“这似乎违反了有关DB规范化的规则”子类型的设计重新安排不是规范化。“规范化”并不意味着“良好的设计”或“减少冗余”。“冗余”并没有什么特别的含义&规范化通过某些折衷减少了某些冗余。对更高级别NFs的规范化将表替换为其他自然连接回它的表。看一本(好的)教科书。还介绍了如何进行信息建模和数据库设计。