ruby-on-rails - 使用(序列化的)数组而不是连接表来链接两个数据库表会很疯狂吗?

标签 ruby-on-rails arrays serialization join wiki

我正在使用 Ruby on Rails 开发网络应用程序。

我的项目中有一个 wiki 文章系统。

作为 wiki 的一部分,文章可以链接到作者,这些链接也需要被修订系统跟踪。作者是整个文章的一个属性,与进入特定修订版的人无关,并且是一个随时间更新的列表以及其他 wiki 属性。

现在,我已经设置好了它,并按如下方式使用中心文章模型工作,该模型有_many 修订版,有_many AuthorCredits:

class Article
  has_many :revisions
end
class Revision
  has_many :author_credits
end
class AuthorCredit
  belongs_to :revision
  belongs_to :author
end

虽然这行得通,但它很尴尬,因为每次我创建一个新的修订版时,我都必须构建一整套额外的连接(以 AuthorCredits 的形式),无论多么小。此外,将这种方法与我的实际模型一起使用会带来相当多的额外复杂性,这使得它变得非常复杂和脆弱。

我正在考虑将整个事物简化为 Article 模型,并向作为作者列表的模型添加序列化数组。本质上,我会将连接表移动到一个序列化的文本字段。然后我可以直接使用像 Paper Trail 这样的开箱即用的修订跟踪插件,并拥有一个非常干净的模型架构。

有没有人做过这样的事情?我从没听说过,所以我担心这可能是个疯狂的想法,但我目前的情况是如此复杂/脆弱,以至于我受到了严重的诱惑。

我马上看到的一个巨大损失是我将无法再调用数据库操作,例如直接连接我的数据。我想这也会扼杀我使用像 belongs_to :authors 这样方便的 Rails 方法的能力。这意味着我将完全失去朝相反方向前进的能力,无法看到所有东西都归功于某个特定的作者,除非我能找到解决方法,否则仅此一项就可能会扼杀整个想法。我可能会通过为当前的 AuthorCredits 设置一组连接来妥协,但也将它们存储为序列化数组,以便它仍然以这种方式进行跟踪,但是对于现成的解决方案,还原会成为问题,我必须修改 Paper Trail 或任何我在恢复时用来处理重建或删除 AuthorCredits 的东西。

您将如何处理这样的系统建模?

最佳答案

是的,这是个坏主意!您将失去拥有数据库的强大功能和灵 active ,而且您还需要管理极其笨拙的数据结构。

您或许可以调整您的模型。

更改关系,使“AuthorCredit”成为“Article”的“hasmany”。

然后您可以为关系添加“从修订版”到“到修订版”属性,或者只接受您只需要当前作者的列表。

您只需要在它们首次出现的修订版上添加作者致谢,您可以通过设置“to revision: 删除它们时的属性”将它们标记为已删除。

关于ruby-on-rails - 使用(序列化的)数组而不是连接表来链接两个数据库表会很疯狂吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3090003/

相关文章:

ruby-on-rails - Rails 嵌套路由未定义方法

mysql - Capistrano "cap deploy:migrations"失败,因为它尝试运行所有迁移,而不仅仅是挂起的迁移

c# - 序列化是否最适合通过套接字发送数据?

Java序列化问题

c# - 序列化使用 yield return 创建的 IEnumerator<T>

ruby-on-rails - rails : joining an array with em space

ruby-on-rails - 是否可以在映射路由之前对 URL 进行预处理?

iphone - 字节数组到 UIImage Objective-C

arrays - 使不可变函数参数可变

c++ - 谁能给我解释一下这段代码?