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 |