加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 如何避免多态关联

发布时间:2020-12-16 19:45:36 所属栏目:百科 来源:网络整理
导读:鉴于您必须实施像社交网络中的新闻源,如Facebook. 目前,我正在使用一个具有多态关联的News类,它可以是 Image,Comment,Friendship,GroupMembership等等.每当创建一个对象时,就像创建新闻一样.它可以正常工作与AR(ActiveRecords),但我遇到麻烦,当我切换到DM(Da
鉴于您必须实施像社交网络中的新闻源,如Facebook.
目前,我正在使用一个具有多态关联的News类,它可以是 Image,Comment,Friendship,GroupMembership等等.每当创建一个对象时,就像创建新闻一样.它可以正常工作与AR(ActiveRecords),但我遇到麻烦,当我切换到DM(DataMapper)或续集,因为两者都不会支持多态关联,并阻止它的使用.

一个解决方法是使用大量的UNIONs的SQL SQL子句来合并所有被视为消息的不同表.但这有一些缺点,特别表现将是可怕的.

所以我想知道如何解决没有多态关联,而仍然获得良好的性能,没有其他的缺点,如有可能添加元数据到新闻?

解决方法

免责声明:我是Sequel的主要开发商.

最好的办法是取决于你想要处理的数据类型.有一种方法是为所有可能的关系提供外键列:

news:
  id
  ... (Other columns)
  image_id
  comment_id
  friendship_id
  group_membership_id

在这样做的事情上真的没有性能差异,而不是使用通用的外键和存储类名.对于延迟加载,您只需选择不是nil / NULL的一个外键字段,并选择适当的关联来加载.对于每个表的查询加载,您只需一次加载所有关联.这也更灵活,因为您可以使用JOIN快速加载,这对于多态方法是不可能的.此外,您可以获得真正的引用完整性的好处.

一个缺点是,如果您以后要添加更多关联类型,则需要在表中添加外键.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读