【发布时间】:2019-08-03 19:06:14
【问题描述】:
背景: 我正在开发一个已经在生产环境中使用多年的预先存在的代码库。核对数据库不是一种选择。
TLDR 我们有一个 Web 表单,其值映射回数据库表,当前根据需要设置表单和值及其关联架构。我们想在表单中添加另一个值,这将成为必需的,同时也使上述值成为可选的。
当前状态: 想象一个 Web 表单,其中包含一个字段“交易编号”,它映射回这样的架构
create_table "transaction", force: :cascade do |t|
t.string "transaction_number", null: false
t.integer "entry_id", null: false
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.integer "rep_id"
t.index ["entry_id", "transaction_number"], name: "index_trans_on_entry_id_and_trans_number", unique: true
end
在当前的设置中,需要一个交易号(自应用程序存在以来一直如此)。
现在的挑战是向网络表单添加另一个字段,我们称之为parts_number。
添加字段带来新的需求:
- transaction/transaction_number 将是可选的未来
-
parts_number将成为必需 - 表单提交必须始终包含
parts_number并且可能包含 transaction_number,但不一定
可以说parts_number和transaction_number之间是一对一/一对一的关系。
鉴于在我们查询交易的当前原始版本中,我们似乎必须改变查询方式,因为未来所有数据都需要parts_number 并且有时有@ 987654328@,但所有历史数据将继续有transaction_number,但永远不会有parts_number。迁移历史数据以突然拥有parts_number 也不是一种选择。
什么可能是一个好的方法?
有什么方法可以安全地接近它吗?
【问题讨论】:
标签: sql ruby-on-rails postgresql activerecord