通过检查其他表中的值来进行CONSTRAINT

时间:2016-02-08 07:58:22

标签: sql postgresql indexing

我有像这样的项目,类别和items_category表:

table items
+----+-------+
| id | title |
+----+-------+

table categories
+----+------+------+
| id | name | main |
+----+------+------+

table items_categories
+---------+-------------+
| item_id | category_id |
+---------+-------------+

我需要制定一个约束,以便一个项目只能有一个主要类别,否则,任何数量的main = false类别。 我最初的想法是设置UNIQUE(item_id, category_id),但这只是将一个项目限制为一个类别。

然后我考虑在items_categories表上有另一个名为main的列,它与category_id列引用的主列完全相同,如下所示:

table items_categories
+---------+-------------+------+
| item_id | category_id | main |
+---------+-------------+------+

UNIQUE(item_id, category_id, main)

但这不是100%标准化数据,如果可能的话我想避免这种情况。

1 个答案:

答案 0 :(得分:0)

您需要的是partial index

class AddDependentColumnToFeatures < ActiveRecord::Migration
  def change
    add_column :features, :dependent, :string, array: true, default: []
  end
end