source

Oracle 복합 기본 키/외부 키 질문

lovecheck 2023. 7. 21. 21:42
반응형

Oracle 복합 기본 키/외부 키 질문

오라클의 한 테이블에 복합 기본 키가 있습니다.첫 번째 테이블의 복합 기본 키를 참조하는 두 번째 테이블의 한 테이블 항목에 대한 외부 키를 생성하려고 합니다.ORA-0256 오류가 발생합니다.제가 이걸 어떻게 입력할 수 있는지 생각해 보셨습니까?

CREATE TABLE groupspersonx ( 
  personid number, 
  groupid number, 
  CONSTRAINT pk_persongroupid PRIMARY KEY(personid, groupid) 
); 

CREATE TABLE restrictedgroups ( 
  groupid number, 
  name varchar2(50), 
  dateadded date, 
  since date, 
  notes varchar2(1024), 
  CONSTRAINT pk_groupid PRIMARY KEY(groupid), 
  CONSTRAINT fk_persongroup FOREIGN KEY(groupid) REFERENCES groupspersonx(personid, groupid) 
); 

오류는 FORIENT KEY가 한 열이지만 부모로 두 열을 제공하려고 하기 때문입니다.복합 키에 묶을 필요가 없습니다. 왜냐하면restrictedgroups을 가지고 있지 않습니다.personid열...

관계도 역방향으로 설정할 수 있습니다. 다음을 사용합니다.

CREATE TABLE restrictedgroups ( 
  groupid number, 
  name varchar2(50), 
  dateadded date, 
  since date, 
  notes varchar2(1024), 
  CONSTRAINT pk_groupid PRIMARY KEY(groupid)
);

CREATE TABLE groupspersonx ( 
  personid number, 
  groupid number, 
  CONSTRAINT pk_persongroupid PRIMARY KEY(personid, groupid),
  CONSTRAINT fk_persongroup FOREIGN KEY(groupid) REFERENCES restrictedgroups(groupid) 
); 

나는 어떤 테이블이든 외부 키 제약 조건을 추가할 것입니다.personid에서 나올 것입니다.

CREATE TABLE groupspersonx( 
  personid number, groupid number, 
CONSTRAINT pk_persongroupid PRIMARY KEY(personid, groupid));

CREATE TABLE restrictedgroups ( 
  pid number, 
  groupid number,
  name varchar2(50), 
  dateadded date, 
  since date, 
  notes varchar2(1024), 
  CONSTRAINT pk_groupid PRIMARY KEY(groupid), 
  CONSTRAINT fk_persongroup FOREIGN KEY(pid,groupid) REFERENCES groupspersonx(personid, groupid));

참조 열 수가 외부 키 열과 같습니다.

열에 복합 기본 키 또는 고유 제약 조건을 만들 때마다 다른 테이블에서 참조를 제공할 수 없습니다.

예를 들면

sql>create table t1( a number,b number,c number ,primary key(a,b,c));

table created.

sql>create table g1(a number constraint con_fg references t1(a));

ERROR at line 1:
ORA-02270: no matching unique or primary key for this column-list

여기서 t1은 상위 테이블이고 g1은 하위 테이블입니다.하위 테이블은 하나의 열에 중복된 값을 포함할 수 있습니다.따라서 오라클은 해당 열 테이블을 허용하지 않습니다.

참고 항목

SQL>select constraint_name,constraint_type from user_constraints where table_name='T1';

CONSTRAINT_NAME                C
------------------------------ -
SYS_C005822                    P

따라서 여기서는 세 개의 열(예: a, b, cin t1 테이블)에 대한 유일한 제약 조건도 제공합니다.

따라서 복합 기본 키 또는 복합 고유 제약 조건에 외부 키를 만들 수 없습니다.

사용할 수 없습니다.

CONSTRAINT fk_persongroup FOREIGN KEY(groupid) REFERENCES groupspersonx(personid, groupid)

그것도 변경:

CONSTRAINT fk_persongroup FOREIGN KEY(groupid) REFERENCES groupspersonx(groupid) 

그러면 되겠군요.

언급URL : https://stackoverflow.com/questions/6602099/oracle-composite-primary-key-foreign-key-question

반응형