এই লেআউটটি সহ আমার একটি টেবিল রয়েছে:
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
। আমি অনুমতি দিতে চান NULL
মধ্যে MenuId
একটি প্রিয় কোন সংযুক্ত করেছে যে মেনু সঞ্চয় করতে, কিন্তু আমি শুধুমাত্র প্রতি ব্যবহারকারী / রেসিপি যুগল এই সারির সর্বাধিক এক চাই।
আমার এখনও অবধি ধারণাগুলি হ'ল:
শূন্যের পরিবর্তে কিছু হার্ড-কোডড ইউআইডি (যেমন সমস্ত শূন্য) ব্যবহার করুন।
তবে,MenuId
প্রতিটি ব্যবহারকারীর মেনুতে এফকে বাধা রয়েছে, সুতরাং আমাকে তখন প্রতিটি ব্যবহারকারীর জন্য একটি বিশেষ "নাল" মেনু তৈরি করতে হবে যা ঝামেলা।পরিবর্তে একটি ট্রিগার ব্যবহার করে নাল প্রবেশের অস্তিত্বের জন্য পরীক্ষা করুন।
আমি মনে করি এটি একটি ঝামেলা এবং আমি যেখানেই সম্ভব ট্রিগারগুলি এড়ানো পছন্দ করি। অধিকন্তু, আমার ডেটা কখনও খারাপ অবস্থায় নেই এমন গ্যারান্টি দেওয়ার জন্য আমি তাদের বিশ্বাস করি না।এটির জন্য কেবল ভুলে যান এবং মাঝারি ওয়্যারে বা একটি সন্নিবেশ ফাংশনে নাল প্রবেশের পূর্ববর্তী অস্তিত্বের জন্য যাচাই করুন এবং এই সীমাবদ্ধতা রাখবেন না।
আমি Postgres 9.0 ব্যবহার করছি।
আমি কি কোন পদ্ধতি অবহেলা করছি?
UserId
,RecipeId
) দিয়ে একাধিক সারিকে অনুমতি দেয় তবে যদিMenuId IS NULL
?