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

ruby-on-rails – Rails中资产的单表继承的优缺点

发布时间:2020-12-17 02:35:02 所属栏目:百科 来源:网络整理
导读:我正在查看文件上传宝石,似乎倾向于将所有资产放在单个“资产”表中并使用STI对它们进行子类化.像 ImageAsset,VideoAsset,AudioAsset等. 我是Rails的新手,我从未使用过STI.以前我会把图像,视频,音频分开制作表格.当然,他们可能会分享几个列,但我会说他们也会
我正在查看文件上传宝石,似乎倾向于将所有资产放在单个“资产”表中并使用STI对它们进行子类化.像 ImageAsset,VideoAsset,AudioAsset等.

我是Rails的新手,我从未使用过STI.以前我会把图像,视频,音频分开制作表格.当然,他们可能会分享几个列,但我会说他们也会有一些不同的列(采样率不适用于图像,例如)

在一个“资产”表中填充所有这些的优点:更容易对所有资产运行查询.缺点:表格会变得更快.如果这是一个问题,我想我总是可以在“类型”列上进行分片.此外,我预计所有仅音频列在图像行等上将为空.

我的整个应用程序将基于资产,所以我想确保在做出决定之前我有优点和缺点.有没有人做过STI资产而后悔呢?有没有人做过而且没有后悔(对于大量的资产)? CTI(类表继承)会在这里成为更好的解决方案吗?

解决方法

我要说的是,使用STI的最大缺点之一就是如果你在STI的所有模型之间添加一个未共享的列(并且它意味着相同的东西),那么你刚刚吹了你的数据完整性就在那里.

(关系型)数据库中的空字段通常会导致比它们解决的问题更多的问题.

我已经被这种情况咬了几次,当你的STI关系中的类开始拥有自己的子类时,它会特别令人沮丧,这反过来会为表添加更多的列.

我想如果你想让这个结构尽可能好,我真的认为CTI是一个更好的选择,尽管让它与rails一起使用可能有点棘手.它至少比STI要复杂得多.

在我的头脑中,我可以想到一个STI可能实际上是合理的情况,那就是当你处理交易模型时(例如从银行账户存款和取款等).在这些情况下,除了交易的“方向”之外,两种模型基本上是相同的.

也可以说STI对于快速原型设计是“好”的,如果你只是想快速将某些东西放在一起以确定它是否有效,你可以使用STI,但是一旦你开始添加不具备的列.对于关系中的所有模型都有意义,你应该将它重构为CTI或其他东西.

(编辑:李大同)

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

    推荐文章
      热点阅读