পোস্টগ্রিস: কম্পোজিট কী কীভাবে করবেন?


111

যৌগিক কী তৈরির ক্ষেত্রে সিনট্যাক্স ত্রুটিটি বুঝতে পারি না। এটি একটি যুক্তিযুক্ত ত্রুটি হতে পারে, কারণ আমি বিভিন্ন ধরণের পরীক্ষা করেছি।

পোস্টগ্রিসে আপনি কীভাবে সম্মিলিত কী তৈরি করবেন?

CREATE TABLE tags
     (
              (question_id, tag_id) NOT NULL,
              question_id INTEGER NOT NULL,
              tag_id SERIAL NOT NULL,
              tag1 VARCHAR(20),
              tag2 VARCHAR(20),
              tag3 VARCHAR(20),
              PRIMARY KEY(question_id, tag_id),
              CONSTRAINT no_duplicate_tag UNIQUE (question_id, tag_id)
     );
    ERROR:  syntax error at or near "("
    LINE 3:               (question_id, tag_id) NOT NULL,
                          ^

উত্তর:


171

আপনার যৌগিক PRIMARY KEYস্পেসিফিকেশন ইতিমধ্যে আপনি যা চান তা করে। যে লাইনটি আপনাকে একটি সিনট্যাক্স ত্রুটি দিচ্ছে তা ছাড়ুন, এবং অতিরিক্ত কাজ CONSTRAINT(ইতিমধ্যে অন্তর্ভুক্ত) বাদ দিন :

 CREATE TABLE tags
      (
               question_id INTEGER NOT NULL,
               tag_id SERIAL NOT NULL,
               tag1 VARCHAR(20),
               tag2 VARCHAR(20),
               tag3 VARCHAR(20),
               PRIMARY KEY(question_id, tag_id)
      );

NOTICE:  CREATE TABLE will create implicit sequence "tags_tag_id_seq" for serial column "tags.tag_id"
    NOTICE:  CREATE TABLE / PRIMARY KEY will create implicit index "tags_pkey" for table "tags"
    CREATE TABLE
    pg=> \d tags
                                         Table "public.tags"
       Column    |         Type          |                       Modifiers       
    -------------+-----------------------+-------------------------------------------------------
     question_id | integer               | not null
     tag_id      | integer               | not null default nextval('tags_tag_id_seq'::regclass)
     tag1        | character varying(20) |
     tag2        | character varying(20) |
     tag3        | character varying(20) |
    Indexes:
        "tags_pkey" PRIMARY KEY, btree (question_id, tag_id)

আপনি ট্যাগ_ইডের (ট্যাগ 1, ট্যাগ 2, ট্যাগ3) "অনিবার্য সংখ্যার অনন্য রেফারেন্সের মতো কনট্রিন্ট কীভাবে প্রয়োগ করবেন?"
লিও লোপল্ড হার্টজ 준영

4
@Masi, আমি মনে করি না আমি কি তোমাকে এখানে মডেল করার চেষ্টা করছেন যথেষ্ট বুঝতে, এবং, অকপট হতে, কলাম tag1মাধ্যমে tag3আমাকে সুপারিশ আপনি আরও নকশা পরিমার্জনা যা করতে হবে পারে। আপনার মডেলের একটি প্রাকৃতিক ভাষার বর্ণনা এবং কয়েকটি উদাহরণ রেকর্ড সহ সম্ভবত একটি পৃথক প্রশ্ন সাহায্য করবে।
পাইলক্রো

18

আপনি যে ত্রুটিটি পাচ্ছেন তা লাইন 3 এ রয়েছে ie অর্থাৎ এটি এতে নেই

CONSTRAINT no_duplicate_tag UNIQUE (question_id, tag_id)

তবে আগে:

CREATE TABLE tags
     (
              (question_id, tag_id) NOT NULL,

সঠিক টেবিল সংজ্ঞা পাইলক্রো দেখানো মত।

এবং যদি আপনি ট্যাগ 1, ট্যাগ 2, ট্যাগ 3 (যা খুব সন্দেহজনক মনে হয়) এ অনন্য যুক্ত করতে চান তবে বাক্য গঠনটি হ'ল:

CREATE TABLE tags (
    question_id INTEGER NOT NULL,
    tag_id SERIAL NOT NULL,
    tag1 VARCHAR(20),
    tag2 VARCHAR(20),
    tag3 VARCHAR(20),
    PRIMARY KEY(question_id, tag_id),
    UNIQUE (tag1, tag2, tag3)
);

বা, আপনি যদি নিজের ইচ্ছানুযায়ী বাধাটির নাম রাখতে চান:

CREATE TABLE tags (
    question_id INTEGER NOT NULL,
    tag_id SERIAL NOT NULL,
    tag1 VARCHAR(20),
    tag2 VARCHAR(20),
    tag3 VARCHAR(20),
    PRIMARY KEY(question_id, tag_id),
    CONSTRAINT some_name UNIQUE (tag1, tag2, tag3)
);
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.