2025-08-16 01:44
Tags:SQL
참조
- 정규화로 테이블 분리 해놓고 참조가 없으면? → 데이터 불일치, 데이터 무결성 파괴
- 참조 무결성 제약 조건 = 외래키 도입(like 부모-자식 관계)
- 기본키(PK): 테이블각 행 유일하게 식별 가능. 부모 역할
- 외래키(FK): 한 테이블의 열이 다른 테이블의 기본 키 참조하는 값
-- 부모 테이블
CREATE TABLE Customers (
customer_id INT PRIMARY KEY,
name VARCHAR(50) NOT NULL
);
-- 자식 테이블
CREATE TABLE Orders (
order_id INT PRIMARY KEY,
book_name VARCHAR(100),
customer_id INT,
CONSTRAINT fk_customer -- 제약조건의 이름을 지정 (관리를 위해 권장)
FOREIGN KEY (customer_id) -- Orders 테이블의 customer_id를 외래 키로 지정
REFERENCES Customers(customer_id) -- Customers 테이블의 customer_id를 참조
);
ON UPDATE와 ON DELETE 옵션
- 부모 테이블의 데이터 변경, 삭제 되었을때 어떻게 대응할지
- 4. 참조 관계의 관리 ON UPDATE와 ON DELETE 옵션
옵션 | 장점 | 주의점 | |
---|---|---|---|
CASCADE | 데이터의 완전한 동기화를 보장. | 의도치 않은 대량의 데이터 삭제가 발생할 수 있어 신중하게 사용해야 함. | 강력한 종속 관계 (게시글과 댓글) |
SET NULL | 자식 데이터는 보존하면서 연결만 끊음. | 데이터의 의미가 모호해질 수 있음 (주인 없는 주문). 외래 키 열이 NULL 허용이어야 함. | 느슨한 관계 (직원과 부서) |
RESTRICT | 데이터 손실을 막는 가장 안전한 방법. | 데이터를 삭제하려면 반드시 자식 데이터를 먼저 처리해야 하는 번거로움이 있음. | 대부분. 이후 어플리케이션에서 명시적 처리 |