我有一个这样布局的表格:
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);
然而,这将允许具有相同(UserId, RecipeId)
的多行,如果MenuId IS NULL
。我想允许MenuId
中的NULL
存储一个没有关联菜单的收藏夹,但每个用户/食谱对最多只需要其中一行。
到目前为止我的想法是:
使用一些硬编码的UUID(例如全零)而不是null。< br / >
然而,MenuId
对每个用户的菜单都有一个FK约束,所以我必须创建一个特殊的&;null&;菜单为每个用户,这是一个麻烦
使用触发器检查是否存在空条目。< br / > 我认为这是一个麻烦,我喜欢尽可能避免触发。另外,我不相信他们能保证我的数据永远不会处于糟糕的状态
我使用的是Postgres 9.0。有没有什么方法我忽略了?