programing

게시물:복합 키를 사용하는 방법?

telebox 2023. 5. 7. 11:22
반응형

게시물:복합 키를 사용하는 방법?

복합 키를 만들 때 구문 오류를 이해할 수 없습니다.제가 여러 가지를 테스트했기 때문에 논리적 오류일 수 있습니다.

Postgres에서 복합 키를 만들려면 어떻게 해야 합니까?

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,
                          ^

사용자의 컴파운드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)

당신이 받고 있는 오류는 라인 3에 있습니다. 즉, 라인 3에 없습니다.

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)
);

언급URL : https://stackoverflow.com/questions/1285967/postgres-how-to-do-composite-keys

반응형