首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >创建具有空列的唯一约束

创建具有空列的唯一约束
EN

Stack Overflow用户
提问于 2011-11-28 05:16:13
回答 4查看 119.8K关注 0票数 293

我有一个布局是这样的表:

代码语言:javascript
复制
CREATE TABLE Favorites
(
  FavoriteId uuid NOT NULL PRIMARY KEY,
  UserId uuid NOT NULL,
  RecipeId uuid NOT NULL,
  MenuId uuid
)

我想创建一个类似下面这样的唯一约束:

代码语言:javascript
复制
ALTER TABLE Favorites
ADD CONSTRAINT Favorites_UniqueFavorite UNIQUE(UserId, MenuId, RecipeId);

但是,如果为MenuId IS NULL,这将允许多个行具有相同的(UserId, RecipeId)。我希望允许MenuId中的NULL存储一个没有关联菜单的收藏夹,但我只希望每个用户/菜谱对最多只有一行。

到目前为止,我的想法是:

  1. 使用一些硬编码的UUID (例如全零)而不是null。

但是,MenuId在每个用户的菜单上都有一个FK约束,所以我必须为每个用户创建一个特殊的" null“菜单,这很麻烦。

  • 使用触发器检查是否存在null条目。

我认为这是一个麻烦,我喜欢尽可能避免触发器。此外,我不相信他们能保证我的数据永远不会处于糟糕的状态。

  • 忘记它,检查中间件或插入函数中以前是否存在null条目,并且没有这个约束。

我使用的是Postgres 9.0。

有没有什么我忽略的方法?

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8289100

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档