DB

외래키

sdafdq 2023. 10. 26. 10:41
CREATE TABLE Orders (
  orderid INTEGER PRIMARY KEY,
  custid  INTEGER ,
  bookid  INTEGER ,
  saleprice INTEGER ,
  orderdate DATE,
  FOREIGN KEY (custid) REFERENCES Customer(custid),
  FOREIGN KEY (bookid) REFERENCES Book(bookid)
);
foreign key(내테이블의열이름) references 참조할테이블(참조테이블의열이름)

이렇게 하면 외래키로 등록이 된다.

 

외래키를 등록하지 않아도 join하고자 하는 테이블을 참조할 수 있다.

 

근데 외래키를 등록하는 이유는

무결성 때문에 그렇다.

그러니까, 

외래키는 저렇게 보통 다른 테이블 열의 id와 맞추는데,

저 다른 테이블의 id의 값 중에 외래키를 가진 테이블의 외래키열에 저 다른 테이블의 id값중에만 있어야 한다는 거다.

 

그러니까,

외래키의 대상이 되는 테이블의 id에 있는 값 중에서만

외래키 열의 데이터가 될 수 있다는 거다.

 

외래키열의 데이터가 외래키 대상테이블의 id중에서 존재하지 않으면 제약조건에 위배된다고 오류를 발생시킨다고 한다.

 

이런 무결성을 위해 외래키를 사용하는 거다.

 

 

사용하지 않는 경우도 있다고 한다.

귀찮음 때문이라고 한다. 신경써야 할 것도 늘어나고..

또 무결성인지 검사하기 때문에 성능 상 불리한 점이 있다.

 

그래도 나는 데이터 무결성을 위해 사용하는 편이 좋아보이긴 한다.

 

 

참고로 누군가 나 자신을 참조하고 있으면(누군가 나(테이블)에 대해 외래키(references)를 가지고 있으면) 나는 삭제되지 않는다.

 

근데 외래키를 가지고 있는 쪽은 삭제 가능하다.

그 외래키 있는 테이블의 옵션을 없에거나 테이블을 없에거나 등 참조가 풀려야 나도 삭제가 가능하다.

 

 

'DB' 카테고리의 다른 글

DB 데이터 타입  (0) 2023.11.02
select 문 조건 순서  (0) 2023.10.26
select (where 포함)  (0) 2023.10.23
뷰, 인덱스, 스토어드 프로시저, 트리거  (0) 2023.10.20
alter 테이블 자체를 수정  (0) 2023.10.19