使用空列創(chuàng)建唯一約束我有一個這種布局的表:CREATE TABLE Favorites(
FavoriteId uuid NOT NULL PRIMARY KEY,
UserId uuid NOT NULL,
RecipeId uuid NOT NULL,
MenuId uuid)我想創(chuàng)建一個類似于此的唯一約束:ALTER TABLE FavoritesADD CONSTRAINT Favorites_UniqueFavorite UNIQUE(UserId, MenuId, RecipeId);但是,這將允許多行具有相同的(UserId, RecipeId)if MenuId IS NULL。我想允許NULL在MenuId存儲不具有關(guān)聯(lián)菜單中的最愛,但我只希望每個用戶/食譜對這些行中最多只有一個。我到目前為止的想法是:使用一些硬編碼的UUID(例如全零)而不是null。但是,MenuId每個用戶的菜單都有一個FK約束,所以我必須為每個用戶創(chuàng)建一個特殊的“空”菜單,這是一個麻煩。使用觸發(fā)器檢查是否存在空條目。我認(rèn)為這是一個麻煩,我喜歡盡可能避免觸發(fā)器。另外,我不相信他們能保證我的數(shù)據(jù)永遠(yuǎn)不會處于不良狀態(tài)。只需忘記它并檢查中間件或插入函數(shù)中是否存在空條目,并且沒有此約束。我正在使用Postgres 9.0。我有什么方法可以忽略嗎?
使用空列創(chuàng)建唯一約束
翻閱古今
2019-07-25 18:45:21