2014-10-05 3 views
0

내가 얻기 오류 나는 PostgreSQL을

PostgreSQL을

를 사용 박물관 데이터베이스를 만들려고하고 있어요에 다리 테이블을 생성하려고 할 때 내가했던

CREATE DOMAIN lCap as int not null check (VALUE >= 0); 
CREATE TYPE Cap as (min lCap, max lCap); 
CREATE DOMAIN lDim as float8 not null check (VALUE > 0); 
CREATE TYPE lArea as (length lDim, width lDim); 
CREATE DOMAIN lNam as varchar(50) not null; 
CREATE DOMAIN lDoor as smallint not null; 

create table Locations 
(
    locSerial  serial not null primary key, 
    locName   lNam, 
    locDimensions  lArea, 
    locCapacity  Cap, 
    locDoors  lDoor 
); 

CREATE DOMAIN eTime as timestamp not null; 
CREATE DOMAIN eNam as varchar(25) not null; 
CREATE DOMAIN eDescr as varchar(512) not null; 

create table Exhibitions 
(
    exhSerial   serial not null primary key, 
    exhName   eNam, 
    exhDescription  eDescr, 
    exhStrtDate   eTime, 
    exhEndDate  eTime 

); 


CREATE DOMAIN tyID AS smallint not null check (VALUE > 100); 
CREATE DOMAIN tyNam AS varchar(20) not null; 

CREATE TABLE Types(
    typID  tyID primary key, 
    typName  tyNam 

); 


CREATE DOMAIN sID AS smallint not null check (VALUE > 100); 
CREATE DOMAIN sNam AS varchar(30) not null; 

CREATE TABLE Subtypes(
    sbtID  sID PRIMARY KEY, 
    sbtName  sNam 


); 


CREATE DOMAIN mID AS smallint not null check (VALUE > 100); 
CREATE DOMAIN mNam AS varchar(50) not null; 

CREATE TABLE Mediums(
    medID  mID primary key, 
    medName  mNam 

); 


CREATE DOMAIN crID AS smallint not null check (VALUE > 100); 
CREATE DOMAIN crNam AS varchar(35); 

CREATE TABLE Creators(
    creID  crID primary key, 
    creName  crNam 

); 


CREATE DOMAIN wAlphID AS varchar(4) not null; 
CREATE DOMAIN wNumID AS smallint not null check (VALUE > 1000); 
CREATE DOMAIN wObjNam AS varchar(120) not null; 
CREATE DOMAIN wDateMad AS varchar(15) not null; 
CREATE DOMAIN wDateAcqu AS date not null; 
CREATE DOMAIN wInsurValue AS smallint not null; 
CREATE DOMAIN wObjDiscip AS varchar(1000) not null; 

CREATE TABLE Works(
    workAlphID   wAlphID, 
    workNumberID  wNumID, 
    workObjectName  wObjNam, 
    workCreatorNameID  crID, 
    workTypeID   tyID, 
    workSubtypeID  sID, 
    workDateMade  wDateMad, 
    workDateOfAcquisition wDateAcqu, 
    workInsuranceValue  wInsurValue, 
    workObjectDiscription wObjDiscip, 
    primary key (workAlphID,workNumberID), 
    foreign key (workCreatorNameID) references Creators(creID), 
    foreign key (workTypeID) references Types(typID), 
    foreign key (workSubtypeID) references Subtypes(sbtID) 
); 

모든이 테이블까지 괜찮이 모든 작업

하지만이 테이블을 Works 테이블과 매체 테이블 사이의 브리지로 Works_Mediums를 만들려고 할 때

이 오류가 계속 발생합니다 오류 : 참조 된 테이블에 주어진 키와 일치하는 고유 제한 조건은

CREATE TABLE Works_Mediums(   
    wmedAlphID  wAlphID, 
    wmedNumberID wNumID, 
    wmedID   mID, 
    primary key (wmedAlphID, wmedNumberID, wmedID), 
    foreign key (wmedAlphID) references Works(workAlphID), 
    foreign key (wmedNumberID) references Works(workNumberID), 
    foreign key (wmedID) references Mediums(medID) 
); 

모든 아이디어를 어떻게이 오류를 해결하기 위해이 "작동하지 않습니다"는 무엇입니까?

시선

답변

1

이 부분

foreign key (wmedAlphID) references Works(workAlphID), 
foreign key (wmedNumberID) references Works(workNumberID), 

foreign key (wmedAlphID, wmedNumberID) references Works (workAlphID, workNumberID), 

의 PostgreSQL의 오류 메시지가 우수해야한다. "Works"테이블에서 고유 제한 조건 (이 경우 기본 키 제약 조건)은 "workAlphID"및 "workNumberID"열 쌍에 있습니다. 외래 키 제약 조건은 이고 그 쌍은입니다.

고유 제한 조건이 반드시 기본 키 제한 조건 일 필요는 없습니다. unique으로 선언 된 열 집합은 외래 키 제약 조건의 대상이 될 수 있습니다.

+0

이제 완벽하게 작동합니다. 고맙습니다. – Alex