第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用空列創(chuàng)建唯一約束

使用空列創(chuàng)建唯一約束

翻閱古今 2019-07-25 18:45:21
使用空列創(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。我有什么方法可以忽略嗎?
查看完整描述

3 回答

?
慕標(biāo)5832272

TA貢獻(xiàn)1966條經(jīng)驗(yàn) 獲得超4個贊

您可以在MenuId上創(chuàng)建一個帶有合并的唯一索引:

CREATE UNIQUE INDEXFavorites_UniqueFavorite ON Favorites(UserId, COALESCE(MenuId, '00000000-0000-0000-0000-000000000000'), RecipeId);

你只需要為COALESCE選擇一個永遠(yuǎn)不會出現(xiàn)在現(xiàn)實(shí)生活中的UUID。在現(xiàn)實(shí)生活中你可能永遠(yuǎn)不會看到零UUID,但如果你是偏執(zhí)狂,你可以添加一個CHECK約束(因?yàn)?em>它們真的是為了讓你......):

alter table Favoritesadd constraint check(MenuId <> '00000000-0000-0000-0000-000000000000')


查看完整回答
反對 回復(fù) 2019-07-25
  • 3 回答
  • 0 關(guān)注
  • 570 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號