asp*_*ect 4 activerecord ruby-on-rails single-table-inheritance class-table-inheritance ruby-on-rails-3
我正在查看文件上传宝石,似乎倾向于将所有资产放在单个"资产"表中并使用STI对它们进行子类化.像ImageAsset,VideoAsset,AudioAsset等等.
我是Rails的新手,我从未使用过STI.以前我刚才提出images,videos,audios单独的表.当然,他们可能会分享几个列,但我会说他们也会有一些不同的列(例如,采样率不适用于图像)
在一个"资产"表中填充所有这些的优点:更容易对所有资产运行查询.缺点:表格会变得更快.如果这是一个问题,我想我总是可以在"类型"列上进行分片.此外,我预计所有仅音频列在图像行等上将为空.
我的整个应用程序将基于资产,所以我想确保在做出决定之前我有优点和缺点.有没有人做过STI资产而后悔呢?有没有人做过而且没有后悔(对于大量的资产)?CTI(类表继承)会在这里成为更好的解决方案吗?
我要说的是,使用STI的最大缺点之一就是如果你在STI的所有模型之间添加一个未共享的列(并且它意味着相同的东西),那么你刚刚吹了你的数据完整性就在那里.
(关系型)数据库中的空字段通常会导致比它们解决的问题更多的问题.
我已经被这种情况咬了几次,当你的STI关系中的类开始拥有自己的子类时,它会特别令人沮丧,这反过来会为表添加更多的列.
我想如果你想让这个结构尽可能好,我真的认为CTI是一个更好的选择,尽管让它与rails一起使用可能有点棘手.它至少比STI要复杂得多.
在我的头脑中,我可以想到一个STI可能实际上是合理的情况,那就是当你处理交易模型时(例如从银行账户存款和取款等).在这些情况下,除了交易的"方向"之外,两种模型基本上是相同的.
也可以说STI对于快速原型设计是"好的",如果你只是想快速将某些东西放在一起以确定它是否有效,你可以使用STI,但是一旦你开始添加不具备的列.对于关系中的所有模型都有意义,你应该将它重构为CTI或其他东西.
| 归档时间: |
|
| 查看次数: |
1485 次 |
| 最近记录: |