apo*_*try 27 postgresql referential-integrity ruby-on-rails
假设我有两个表:users和orders.用户有很多订单,所以我的订单表中自然会有一个外键user_id.
rails中的最佳实践(速度,样式和参照完整性)是什么,以确保删除用户时,所有相关订单也会被删除?我正在考虑以下选项:
案例1. :dependent => :destroy在用户模型中使用
案例2.在postgres中定义表顺序并写入
user_id integer REFERENCES users(id) ON DELETE CASCADE
Run Code Online (Sandbox Code Playgroud)
我有什么理由使用案例1吗?似乎案例2正在做我想做的一切吗?执行速度方面有区别吗?
Pet*_*own 30
这实际上取决于你想要的行为.在情况1中,将在每个关联的订单上调用destroy,因此ActiveRecord回调也将被调用.在案例2中,这些回调不会被触发,但会更快并保证参照完整性.
在应用程序的初期,我建议继续使用,:dependent => :destroy因为它让您以独立于数据库的方式开发.一旦开始扩展,您应该出于性能/完整性原因在数据库中开始这样做.
Wir*_*dIn 19
has_many :orders, dependent: :destroy
add_foreign_key :orders, :users, on_delete: :cascade (在数据库迁移中)
has_many :orders, dependent: :delete_all
| 归档时间: |
|
| 查看次数: |
17726 次 |
| 最近记录: |