gpt4 book ai didi

ruby-on-rails - Rails 唯一性约束和空列的匹配数据库唯一索引

转载 作者:行者123 更新时间:2023-12-02 13:50:30 25 4
gpt4 key购买 nike

我的迁移文件中有以下内容

  def self.up
create_table :payment_agreements do |t|
t.boolean :automatic, :default => true, :null => false
t.string :payment_trigger_on_order
t.references :supplier
t.references :seller
t.references :product
t.timestamps
end
end

我想确保如果指定了product_id,它是唯一的,但我也想允许为空,因此我的模型中有以下内容:

  validates :product_id,
:uniqueness => true,
:allow_nil => true

效果很好,但我应该向迁移文件添加索引

add_index :payment_agreements, :product_id, :unique => true

显然,当为product_id插入两个空值时,这将引发异常。我可以简单地省略迁移中的索引,但我有可能会获得两个具有相同 Product_id 的 PaymentAgreement,如下所示:Concurrency and integrity

我的问题是处理这个问题的最佳/最常见方法是什么

最佳答案

这取决于您的数据库服务器。至于mysql:

A UNIQUE index creates a constraint such that all values in the index must be distinct. An error occurs if you try to add a new row with a key value that matches an existing row. This constraint does not apply to NULL values except for the BDB storage engine. For other engines, a UNIQUE index allows multiple NULL values for columns that can contain NULL.

关于ruby-on-rails - Rails 唯一性约束和空列的匹配数据库唯一索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2926763/

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