我有一个布局是这样的表:
CREATE TABLE Favorites
(
FavoriteId uuid NOT NULL PRIMARY KEY,
UserId uuid NOT NULL,
RecipeId uuid NOT NULL,
MenuId uuid
)
我想创建一个类似下面这样的唯一约束:
ALTER TABLE Favorites
ADD CONSTRAINT Favorites_UniqueFavorite UNIQUE(UserId, MenuId, RecipeId);
但是,如果为MenuId IS NULL
,这将允许多个行具有相同的(UserId, RecipeId)
。我希望允许MenuId
中的NULL
存储一个没有关联菜单的收藏夹,但我只希望每个用户/菜谱对最多只有一行。
到目前为止,我的想法是:
但是,MenuId
在每个用户的菜单上都有一个FK约束,所以我必须为每个用户创建一个特殊的" null“菜单,这很麻烦。
我认为这是一个麻烦,我喜欢尽可能避免触发器。此外,我不相信他们能保证我的数据永远不会处于糟糕的状态。
我使用的是Postgres 9.0。
有没有什么我忽略的方法?
https://stackoverflow.com/questions/8289100
复制相似问题