PostgreSQL: ডিফল্ট সীমাবদ্ধতার নাম


88

পোস্টগ্রেএসকিউএলে একটি সারণী তৈরি করার সময়, যদি সরবরাহ না করা হয় তবে ডিফল্ট সীমাবদ্ধতার নাম নির্ধারিত হবে:

CREATE TABLE example (
    a integer,
    b integer,
    UNIQUE (a, b)
);

তবে ALTER TABLEসীমাবদ্ধতা যুক্ত করে মনে হচ্ছে একটি নাম বাধ্যতামূলক:

ALTER TABLE example ADD CONSTRAINT my_explicit_constraint_name UNIQUE (a, b);

এর ফলে আমি যে প্রকল্পগুলিতে কাজ করেছি তাতে নামকরণের কিছুটা অসঙ্গতি সৃষ্টি হয়েছে এবং নিম্নলিখিত প্রশ্নগুলির অনুরোধ জানানো হয়েছে:

  1. সারণী তৈরির সময় যুক্ত করা হলে এটি যে নামটি পেয়েছিল তা দিয়ে কোনও সারণী বাধা যুক্ত করার কোনও সহজ উপায় আছে?

  2. যদি তা না হয় তবে অসঙ্গতি রোধে ডিফল্ট নামগুলি কি পুরোপুরি এড়ানো উচিত?


4
আমি কেবল এই কারণেই ডিফল্ট নামগুলি এড়াতে একটি বিধি তৈরি করি - আপনি এমন পরিস্থিতিতে শেষ করেন যেখানে প্রতিটি স্থাপনায় সীমাবদ্ধতার আলাদা আলাদা নাম থাকে।
পল টমলিন

উত্তর:


36

ম্যানুয়াল এই সম্পর্কে বেশ স্পষ্ট ( " tableconstraint: এই ফর্ম সারণি তৈরি হিসাবে একই সিনট্যাক্স ব্যবহার করে একটি টেবিল একটি নতুন বাধ্যতা যোগ করা হয়েছে। ")

সুতরাং আপনি কেবল চালাতে পারেন:

টেবিলের বিকল্পটি অনন্য (ক, খ) যুক্ত করুন;

4
আহ! আমি ভুলভাবে CONSTRAINTলাইক ALTER TABLE example ADD CONSTRAINT UNIQUE (a, b);এবং ত্রুটি পেয়েছিলাম অন্তর্ভুক্ত ছিল । ধন্যবাদ!
ইয়ান ম্যাকিননন

282

পোস্টগ্রেএসকিউএল সূচকগুলির জন্য আদর্শ নামগুলি হ'ল:

{tablename}_{columnname(s)}_{suffix}

যেখানে প্রত্যয় নিম্নলিখিতগুলির মধ্যে একটি:

  • pkey একটি প্রাথমিক কী বাধা জন্য
  • key একটি অনন্য বাধা জন্য
  • excl বর্জনীয় সীমাবদ্ধতার জন্য
  • idx অন্য কোন ধরণের সূচকের জন্য
  • fkey একটি বিদেশী কী জন্য
  • check চেক সীমাবদ্ধতার জন্য

সিকোয়েন্সগুলির জন্য আদর্শ প্রত্যয়টি

  • seq সমস্ত ক্রম জন্য

আপনার অনন্য-সীমাবদ্ধতার প্রমাণ:

বিজ্ঞপ্তি: টেবিল তৈরি করুন / অনন্যতা "টেবিলের" ​​উদাহরণস্বরূপ "উদাহরণ_a_b_key" অন্তর্নিহিত সূচক তৈরি করবে


10
খুব দরকারী, ধন্যবাদ! বিদেশী কীগুলি প্রত্যয় ব্যবহার করে fkeyএবং মাল্টি-কলামে বিদেশী কী সীমাবদ্ধতা কেবল প্রথম কলামের নাম অন্তর্ভুক্ত বলে মনে হয়।
ইয়ান ম্যাকিননন

4
@ আইয়ানম্যাকিনন, এটি সেরা উত্তর হওয়া উচিত!
মারসিও মাজ্জাচাতো

এই তথ্যটি সোনার! আপনি এগুলি চালিয়ে উদাহরণস্বরূপ নিশ্চিত করতে পারেনCREATE TABLE mytable (mycolumn numeric UNIQUE);
jmagnusson

6
"পোস্টগ্র্যাস্কল সূচক নামকরণের সম্মেলনগুলি" গুগল করার সময় আমি ঠিক যে উত্তরটি খুঁজছিলাম
ফ্যানসি জন

4
@ সোমন আঃ দুঃখিত, আমার ধারণা আমি E.4.3.3 ইউটিলিটি কমান্ডের সমাপ্তি বোঝাতে চাইছি। এটি E.4.3.4 এর আগে শেষ বুলেট আইটেম: বিদেশী কীগুলির জন্য ডিফল্ট সীমাবদ্ধতার নাম নির্বাচন করার সময় সমস্ত কী কলামের নাম ব্যবহার করুন (পিটার আইসেন্ট্রট) "
মাইকেল হিউসন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.