Postgresql এ, দুটি কলামের সংমিশ্রণে অনন্য বল প্রয়োগ করুন


187

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

এই ক্ষেত্রে:

CREATE TABLE someTable (
    id int PRIMARY KEY AUTOINCREMENT,
    col1 int NOT NULL,
    col2 int NOT NULL
)

সুতরাং, col1এবং col2পুনরাবৃত্তি করতে পারেন, তবে একই সাথে নয়। সুতরাং, এটি অনুমোদিত হবে (আইডি সহ নয়)

1 1
1 2
2 1
2 2

তবে এটি নয়:

1 1
1 2
1 1 -- would reject this insert for violating constraints

যেহেতু এটি
গুগলের

উত্তর:


224
CREATE TABLE someTable (
    id serial primary key,
    col1 int NOT NULL,
    col2 int NOT NULL,
    unique (col1, col2)
)

autoincrementpostgresql নয়। আপনি একটি চান serial

যদি কল 1 এবং কল 2 একটি অনন্য করে এবং শূন্য হতে না পারে তবে তারা একটি ভাল প্রাথমিক কী তৈরি করে:

CREATE TABLE someTable (
    col1 int NOT NULL,
    col2 int NOT NULL,
    primary key (col1, col2)
)

5
আমি এখানে অনন্য চেয়ে একটি প্রাথমিক কী পরামর্শ দিতে চাই, কারণ আমরা এই ক্ষেত্রে NULL মানকে অনুমতি দিই না। "নোট একটি অনন্য বাধ্যতা নেই, নিজে, একটি অনন্য শনাক্তকারী কারণ এটি নাল মান অগ্রাহ্য করে না প্রদান না)।": PostgeSQL ডক্স থেকে postgresql.org/docs/8.1/static/ddl-constraints.html#AEN2038
ndequeker

আমি কীভাবে এটি স্কিমা সংজ্ঞাতে প্রয়োগ করতে পারি?
ওয়াগং

2
কিছু পরিস্থিতিতে আপনি একটি সারোগেট কীটি কলামগুলির সংমিশ্রণের পরিবর্তে প্রাথমিক কী হিসাবে ব্যবহার করতে চান। বিশেষত যখন বড় ডেটা ভলিউমে যোগদান করে তখন পারফরম্যান্স উন্নত করতে। আমি ব্যক্তিগতভাবে নীচে অনন্য চুক্তি সমাধানের জন্য গিয়েছিলাম।
অ্যালেক্সিস.রোলল্যান্ড

1
অনন্য (কল 1, কল 2 = '1') এর মতো কেবলমাত্র এক অনুক্রমের ক্ষেত্রে কোনও অনন্য বাধা প্রয়োগ করা সম্ভব?
বিক্রম খেলালানি

পোস্টগ্রিস: স্ট্যাকওভারফ্লো / প্রশ্ন / 16236365/… স্কিএল সার্ভার: স্ট্যাকওভারফ্লো.com
ওমকার নেওগি

160

অনন্য প্রতিবন্ধকতা তৈরি করুন যে দুটি সংখ্যার একসাথে পুনরাবৃত্তি করা যাবে না:

ALTER TABLE someTable
ADD UNIQUE (col1, col2)

18

নিয়মিত অনন্য চুক্তির মতো মনে হয় :)

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

আরও এখানে


1
এটি কি স্বাধীনতার aজন্য একটি সূচক এবং একটি সূচক যুক্ত cকরে? কারণ আমাকে দ্রুত aকখনও কখনও ভিত্তিক , এবং কখনও কখনও দ্রুত ভিত্তিক সন্ধান করা প্রয়োজন c
সিএমসিডিগ্রাগনকাই
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.