Tag: 参照完整性

用空列创build唯一约束

我有这个布局的表格: CREATE TABLE Favorites ( FavoriteId uuid NOT NULL PRIMARY KEY, UserId uuid NOT NULL, RecipeId uuid NOT NULL, MenuId uuid ) 我想创build一个类似如下的唯一约束: ALTER TABLE Favorites ADD CONSTRAINT Favorites_UniqueFavorite UNIQUE(UserId, MenuId, RecipeId); 但是,如果MenuId IS NULL ,这将允许具有相同(UserId, RecipeId)多行。 我想在MenuId允许NULL存储没有关联菜单的collections夹,但是我只需要每个用户/配方对的这些行中的最多一个。 我到目前为止的想法是: 使用一些硬编码的UUID(如全零)而不是null。 但是, MenuId对每个用户的菜单都有一个FK约束,所以我必须为每个用户创build一个特殊的“空”菜单,这很麻烦。 请使用触发器检查是否存在空条目。 我认为这是一个麻烦,我喜欢尽可能避免触发器。 另外,我不相信他们保证我的数据永远不会处于不良状态。 只要忘记它,并检查中间件或插入函数中的空条目的存在,并没有这个约束。 我正在使用Postgres 9.0。 有什么方法可以忽略吗?