복붙노트

[SQL] 무슨 오류를 일으키는 : 참조 된 테이블에 대한 키를 제공에는 고유 제한 조건의 일치가 없다?

SQL

무슨 오류를 일으키는 : 참조 된 테이블에 대한 키를 제공에는 고유 제한 조건의 일치가 없다?

예를 들어 테이블 구조 아래의 오류를 제공합니다 :이 참조 된 테이블에 주어진 키와 일치하는 고유 제한은 없으며,이 오류가이 상황에서 발생하는 이유는 지금은 알아낼 수 없습니다 잠시 동안 응시 한.

BEGIN;

CREATE TABLE foo (
    name                VARCHAR(256) PRIMARY KEY
);

CREATE TABLE bar(
    pkey        SERIAL PRIMARY KEY,
    foo_fk      VARCHAR(256) NOT NULL REFERENCES foo(name), 
    name        VARCHAR(256) NOT NULL, 
    UNIQUE (foo_fk,name)
);

CREATE TABLE baz(   
    pkey            SERIAL PRIMARY KEY,
    bar_fk          VARCHAR(256) NOT NULL REFERENCES bar(name),
    name            VARCHAR(256)
);

COMMIT;

이 오류가 발생하는 이유 위의 코드를 나에게 이해가되지 않습니다 다음과 같은 오류를 준다 실행, 깡통 사람이 설명합니다. 나는 포스트 그레스 9.1을 사용하고 있습니다

NOTICE:  CREATE TABLE / PRIMARY KEY will create implicit index "foo_pkey" for table "foo"
NOTICE:  CREATE TABLE will create implicit sequence "bar_pkey_seq" for serial column "bar.pkey"
NOTICE:  CREATE TABLE / PRIMARY KEY will create implicit index "bar_pkey" for table "bar"
NOTICE:  CREATE TABLE / UNIQUE will create implicit index "bar_foo_fk_name_key" for table "bar"
NOTICE:  CREATE TABLE will create implicit sequence "baz_pkey_seq" for serial column "baz.pkey"
NOTICE:  CREATE TABLE / PRIMARY KEY will create implicit index "baz_pkey" for table "baz"
ERROR:  there is no unique constraint matching given keys for referenced table "bar"


********** Error **********

ERROR: there is no unique constraint matching given keys for referenced table "bar"
SQL state: 42830

해결법

  1. ==============================

    1.바 테이블에 이름 열이 UNIQUE 제약 조건이없는 때문입니다.

    바 테이블에 이름 열이 UNIQUE 제약 조건이없는 때문입니다.

    그래서 당신은 당신이 일치하는 두 개의 행이 있기 때문에 그것을 참조 될 줄의 행 bar_fk에 'AMS'와 바즈에 행 삽입 'AMS'의 이름을 포함하는 바 테이블에 2 개 행이 상상?

  2. ==============================

    2.PostgreSQL은 모든 외부 키는 고유 한 (이름) 인덱스가 있어야합니다 그래서 당신의 바 테이블에 부모 테이블의 고유 키를 참조해야합니다.

    PostgreSQL은 모든 외부 키는 고유 한 (이름) 인덱스가 있어야합니다 그래서 당신의 바 테이블에 부모 테이블의 고유 키를 참조해야합니다.

    도 참조 http://www.postgresql.org/docs/9.1/static/ddl-constraints.html#DDL-CONSTRAINTS-FK 구체적으로 :

    강조 광산.

  3. ==============================

    3.당신은 당신이 정의하는 것을 다음했던 것처럼 테이블 수준의 제약 조건으로 UNIQUE를 수행 할 때 여기, 복합 기본 키와 같은 약간 DDL 제약을 볼 수있는 추출물

    당신은 당신이 정의하는 것을 다음했던 것처럼 테이블 수준의 제약 조건으로 UNIQUE를 수행 할 때 여기, 복합 기본 키와 같은 약간 DDL 제약을 볼 수있는 추출물

    "This specifies that the *combination* of values in the indicated columns is unique across the whole table, though any one of the columns need not be (and ordinarily isn't) unique."
    

    두 필드가 가능성이 아닌 고유 한 값을 가질 수있는이 수단은 조합이 고유이 당신의 외래 키 제약 조건을 일치하지 않습니다.

    가장 가능성이 당신이 제약 조건은 열 수준에서가되고 싶어요. 그래서보다는 테이블 레벨 제약으로 그들을 정의 이름 VARCHAR (60) NOT NULL UNIQUE 각 필드에 대한 indivdual 테이블 레벨 제약 조건을 지정하는 등의 열 정의의 끝 'APPEND'UNIQUE.

  4. ==============================

    4.당신은 고유 제한 조건 등의 이름 열이 있어야합니다. 여기에 귀하의 문제를 변경하는 코드의 3 개 라인이다

    당신은 고유 제한 조건 등의 이름 열이 있어야합니다. 여기에 귀하의 문제를 변경하는 코드의 3 개 라인이다

    그게 다야.

  5. from https://stackoverflow.com/questions/11966420/what-is-causing-error-there-is-no-unique-constraint-matching-given-keys-for-ref by cc-by-sa and MIT license