gpt4 book ai didi

ruby-on-rails - 多个关联记录类型的 Rails 数据库设计

转载 作者:搜寻专家 更新时间:2023-10-30 23:48:08 26 4
gpt4 key购买 nike

这是一个设计问题。我希望这是可以接受的。

回到过去,我在一个会计系统上工作,该系统使用平面文件以专有格式存储记录。交易“表”以固定 header (包含交易类型等)和根据交易类型变化的详细记录的格式存储多种类型的交易。

我们在 C 中使用结构和联合来管理记录。

我又一次发现自己在财务系统上工作,只是这次我是在 Rails 中使用 PostgreSQL 作为目标数据库。

我目前正在考虑这个新项目中事务系统的设计,我想知道如何以最好的 Rails 方式来完成这项工作。

  • 我是否有多个表,每种交易类型对应一个表:日记账、销售、采购等? (这是否违反 DRY?)

  • 或者,我是否有一个表示标题的事务表,以及多个表示每种类型详细信息的表?

    如果我这样做,关联如何运作?关联是否可以使用单个 id 连接到多个表?

  • 或者,我是否有一个单一的、非规范化的记录,其中包含完整交易类型范围的每个可能字段?

  • 或者...是否可以像我多年前那样重载表记录?

(虽然不是很想这样做。)

如果您对此有任何想法,我们将不胜感激。

最佳答案

选项 1 听起来您需要一个多态关联,Rails 开箱即用地支持它。虽然它通常以另一种方式工作 - 通常的用例是沿着可以属于多种内容类型的评论对象。这里有一个要点可能有帮助也可能没有帮助:gist.github.com/runemadsen/1242485

尽管要点使用一个连接表,您可以在该表上添加公共(public)字段,这听起来像是多表继承,您的第二选择。这是一个很好的解决方案。不过,您需要一个 gem 才能使其与 Rails 一起使用。试试这个:

github.com/hzamani/active_record-acts_as

选项 3 听起来像是单表继承,这通常是一个糟糕的举动。

我不确定 4 与 2 有何不同。

我会在 2 方面犯错:多表继承。诚然,如果多态关联对您有用,那么只使用 Rails 原生功能是件好事,但我认为您会发现随着时间的推移处理它会变得越来越烦人。像计算所有交易或获取日期范围内的所有交易这样简单的事情将变得困难和脆弱。 MTI正是为这种情况而创建的模式。

关于ruby-on-rails - 多个关联记录类型的 Rails 数据库设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25363275/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com