কাস্টম অনন্য কলাম সীমাবদ্ধতা, কেবলমাত্র যদি একটি কলামের একটি নির্দিষ্ট মান থাকে তবে তা প্রয়োগ করা হয়


19

নিম্নলিখিত হিসাবে কাস্টম অনন্য কলাম সীমাবদ্ধতা রাখা সম্ভব? ধরুন আমার কাছে দুটি কলস রয়েছে subsetএবং typeদুটি স্ট্রিং রয়েছে (যদিও ডেটা টাইপগুলি সম্ভবত কিছু যায় আসে না)।

তাহলে type"সত্যিকারের" হয়, তাহলে আমি সমন্বয় চান typeএবং subsetঅনন্য যাবে। অন্যথায়, কোনও বাধা নেই। আমি ডেবিয়ানে পোস্টগ্রিজ এসকিউএল 8.4 ব্যবহার করছি।


উত্তর:


31

অন্য কথায়, আপনি subsetযদি অনন্য হতে চান type = 'true'
একটি আংশিক অনন্য সূচক এটি করবে:

CREATE UNIQUE INDEX tbl_some_name_idx ON tbl (subset) WHERE type = 'true';

এইভাবে আপনি এমনকি অনন্যের সাথে সংমিশ্রণ তৈরি করতে পারেন NULL, যা অন্যথায় সম্ভব নয় - এই সম্পর্কিত উত্তরে যেমন বর্ণনা করা হয়েছে:
পোস্টগ্রিসএসকিউএল মাল্টি-কলাম অনন্য সীমাবদ্ধতা এবং ন্যুয়াল মানগুলি


ধন্যবাদ ইরভিন আমি নথির দিকে তাকালে এই বিকল্পটি দেখিনি। আরও সরাসরি লিঙ্কটি হল postgresql.org/docs/current/interactive/indexes-partial.html । উদাহরণ দেখুন 11-3।
ফাহিম মিঠা

@FaheemMitha: আমি, এক স্তর উচ্চতর লিঙ্ক যেহেতু আপনি প্রয়োজন মেশা একটি আংশিক সূচক একটি সঙ্গে অনন্য সূচক
এরউইন ব্র্যান্ডস্টেটর

1
@ ইরভিন সেই পৃষ্ঠাটির (আংশিক সূচকগুলি সম্পর্কে) আংশিক অনন্য সূচকের উদাহরণ রয়েছে।
ypercubeᵀᴹ

@ টাইপ्यूब: আহ, ঠিক আছে এটিই ভাল লিঙ্ক। আমি আমার উত্তরটি পরিবর্তন করেছিলাম সেই শেষ অধ্যায়ে দেখিয়েছি।
এরউইন ব্র্যান্ডসটেটার

6

এটি উপরের এরউইনের উত্তরের পরিপূরক, তবে পোস্টগ্রিসকিউএল এক ধরণের সূচকে সমর্থন করে। এগুলি সাধারণত পারস্পরিক একচেটিয়া নয়। আপনি এগুলি হিসাবে হিসাবে ভাবতে পারেন:

  • সূচক পদ্ধতি (বিটি, জিআইএসটি, জিন, ইত্যাদি)। প্রয়োজনে একটি বেছে নিন (বিটি ডিফল্ট হওয়ায়)
  • আংশিক বা পূর্ণ আংশিক হলে একটি ক্লজ ব্যবহার করুন
  • প্রত্যক্ষ বা কার্যক্ষম। আপনি কার্যকারিতা আউটপুট সূচক করতে পারেন।
  • অনন্য বা অনন্য

এই সমস্ত বিভিন্ন উপায়ে একত্রিত করা যেতে পারে। আপনি এখানে যা করছেন তা অনন্য এবং আংশিক বৈশিষ্ট্যগুলি ব্যবহার করছে, যাতে আপনাকে আংশিক অনন্য সূচি দেয় (যা আপনি খুঁজে বের করার সাথে সাথে অত্যন্ত কার্যকর।

তবে ধরুন আপনি সাবসেট ক্ষেত্রের ক্ষেত্রে সংবেদনশীল সূচি রাখতে চান যেখানে টাইপটি সত্য। তারপরে আপনি একটি কার্যকরী সংজ্ঞা যুক্ত করবেন:

CREATE INDEX my_index_name_idx_u ON tbl (lower(subset)) WHERE type;

নোট করুন এটি নীচের () ফাংশনের আউটপুটটিতে একটি অনন্য সূচক তৈরি করে যেখানে টাইপটি সত্য unique


সুতরাং এরউইনের উত্তরের সূচকটি সরাসরি, যেখানে আপনার উদাহরণের একটি কার্যকরী, সঠিক?
ফাহিম মিঠা

@ ফাহিমমিঠা: সঠিক।
এরউইন ব্র্যান্ডস্টেটার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.