【发布时间】:2009-05-29 22:30:54
【问题描述】:
如果我定义一个 Customer 和 Order 模型,其中 Customer “有很多” Orders 和 Order “属于” Customer,在 Rails 中我们谈论 Order具有Customer 到customer_id 的外键,但我们并不是说这是在数据库中强制执行的。
因为 Rails 没有将此定义为数据库级别的约束,所以可能存在违反数据完整性的风险,可能在应用程序外部(或者如果您同时收到请求则在内部?),除非您在数据库中强制执行该约束手动。
为什么 Rails 不在数据库级别定义外键,或者有没有办法让 Rails 做到这一点?
class Customer < ActiveRecord::Base
has_many :orders
end
class Order < ActiveRecord::Base
belongs_to :customer
end
ActiveRecord::Schema.define(:version => 1) do
create_table "customers", :force => true do |t|
t.string "name"
end
create_table "orders", :force => true do |t|
t.string "item_name"
t.integer "customer_id"
end
end
【问题讨论】:
标签: ruby-on-rails database foreign-keys referential-integrity