외래 키는 항상 다른 테이블의 고유 키를 참조합니까?
하위 테이블의 외부 키(단일 열)가 일부 중복 값을 가진 부모 키를 참조할 수 없습니까?
SQL 표준에서 외부 키는 기본 키 또는 상위 테이블의 고유 키를 참조해야 합니다.기본 키에 여러 개의 열이 있는 경우 외부 키의 열 수와 순서는 같아야 합니다.따라서 외부 키는 상위 테이블에서 고유한 행을 참조하므로 중복이 있을 수 없습니다.
댓글:
한다면T.A
기본 키입니다. 그러면 아니요. 중복을 사용할 수 없습니다.모든 기본 키는 고유하고 null이 아니어야 합니다.따라서 자식 테이블에 부모의 기본 키를 참조하는 외부 키가 있는 경우, 이 키는 null이 아닌 고유한 값과 일치해야 하므로 부모 테이블에서 하나의 행만 참조합니다.이 경우 여러 부모 행을 참조하는 자식 행을 만들 수 없습니다.
외부 키 열이 NULL인 하위 행을 생성할 수 있으며, 이 경우 상위 테이블에서 행을 참조하지 않습니다.
아니요, 불가능합니다.
테이블에 외부 키 제약 조건을 정의하면 외부 테이블에 해당하는 키가 하나만 있음을 의미합니다.외부 테이블에 여러 개가 있는 경우 어떤 것을 의미합니까?
위키백과에는 외래 키 항목에 대한 다음과 같은 정의가 있습니다.
외부 키는 다른 테이블의 후보 키와 일치하는 관계형 테이블의 필드입니다.
후보 키는 테이블 내에서 고유합니다.
예, 외부 키가 값이 중복된 열을 참조할 수 있습니다.
주 키가 고유하지 않은 인덱스를 사용하고 생성 시 유효성이 확인되지 않는 경우 이 문제가 발생할 수 있습니다. (하지만 이런 상황은 실제로 본 적이 없습니다.)@Bill Karwin이 지적했듯이, 그것은 매우 혼란스러울 것입니다.따라서 이 문제는 실제로 걱정할 필요가 없는 상황일 수 있습니다.)
--Create a table with two duplicate rows
create table test1(a number);
insert into test1 values(1);
insert into test1 values(1);
commit;
--Create a non-unique index
create index test1_index on test1(a);
--Use the non-unique index for the primary key, do not validate
alter table test1 add constraint test1_pk primary key (a)
using index test1_index novalidate;
--Build another table with a foreign key to TABLE1
create table test2(a number,
constraint test2_fk foreign key (a) references test1(a));
--Inserting a value that refers to the duplicate value still works.
insert into test2 values(1);
commit;
--The foreign key still works:
--ORA-02291: integrity constraint (TEST2_FK) violated - parent key not found
insert into test2 values(2);
--The primary key works as expected, but only for new values:
--ORA-00001: unique constraint (TEST1_PK) violated
insert into test1 values(1);
언급URL : https://stackoverflow.com/questions/8706073/does-foreign-key-always-reference-to-a-unique-key-in-another-table
'code' 카테고리의 다른 글
Springboot 스프링 액추에이터 상태 끝점에서 Mongo 상태 표시기를 비활성화할 수 있습니까? (0) | 2023.06.27 |
---|---|
코드에서 장치의 IP 주소를 가져오는 방법은 무엇입니까? (0) | 2023.06.27 |
VBA를 사용하여 세미콜론으로 구분된 CSV 파일을 저장하는 방법은 무엇입니까? (0) | 2023.06.27 |
접두사/접미사를 사용하여 이름을 변경하는 방법은 무엇입니까? (0) | 2023.06.27 |
Express에서 "다음" 매개 변수는 무엇에 사용됩니까? (0) | 2023.06.22 |