[sql] 뷰와 데이터 무결성 제약 조건

데이터베이스에서 뷰는 가상의 테이블로써, 하나 이상의 기본 테이블로부터 조회한 결과를 저장하는 객체입니다. 뷰를 사용하면 저장된 쿼리문을 재사용할 수 있으며, 특정 사용자에게만 필요한 데이터를 제한적으로 공개할 수 있습니다.

하지만 뷰는 단순히 조회 결과를 저장하는 것뿐만 아니라, 데이터의 무결성을 보장하기 위해 제약 조건을 설정할 수도 있습니다. 데이터 무결성은 데이터베이스 내부에서 데이터의 일관성과 유효성을 유지하기 위한 규칙입니다.

뷰에서 데이터 무결성을 제공하기 위해 다음과 같은 제약 조건을 설정할 수 있습니다:

1. CHECK 제약 조건

CHECK 제약 조건은 특정 열에 대한 값의 범위나 조건을 지정하여 데이터의 유효성을 보장합니다. 뷰에서 CHECK 제약 조건을 설정하면, 해당 뷰를 통해 데이터를 추가하거나 변경할 때 해당 제약 조건을 만족하지 않으면 오류가 발생합니다.

CREATE VIEW my_view AS
SELECT * 
FROM my_table
WHERE column1 > 0
  AND column2 = 'A'
WITH CHECK OPTION;

위 예제에서는 my_table의 column1 값이 0보다 크고, column2 값이 ‘A’인 데이터만 조회하도록 my_view를 생성했습니다. WITH CHECK OPTION은 이 뷰를 통해 데이터를 추가하거나 변경할 때 해당 제약 조건을 만족해야 함을 나타냅니다.

2. 뷰 열 제약

뷰 열 제약은 특정 뷰의 열에 대해 값을 변경할 수 없도록 제한하는 제약 조건입니다. 이를 통해 특정 뷰를 통해 값을 제한된 방식으로만 업데이트할 수 있습니다.

CREATE VIEW my_view AS
SELECT column1, column2 
FROM my_table
WITH CHECK OPTION CONSTRAINTS my_constraint;

위 예제에서는 my_table의 column1과 column2 열만을 조회하는 my_view를 생성했습니다. WITH CHECK OPTION CONSTRAINTS는 이 뷰를 통해 데이터를 업데이트할 때 my_constraint라는 이름의 뷰 열 제약 조건을 적용해야 함을 나타냅니다.

3. 기준 테이블 제약 조건 상속

뷰는 기본 테이블로부터 데이터를 조회하기 때문에, 기준 테이블에 설정된 제약 조건을 상속받습니다. 이를 통해 뷰에서도 기준 테이블의 데이터 무결성을 유지할 수 있습니다.

ALTER TABLE my_table
ADD CONSTRAINT my_constraint CHECK (column1 > 0);

CREATE VIEW my_view AS
SELECT * 
FROM my_table;

위 예제에서는 my_table에 column1 값이 0보다 큰지 확인하는 제약 조건 my_constraint를 추가했습니다. my_view는 이 제약 조건을 상속받아, my_table 뷰에서도 column1 값이 0보다 커야만 데이터를 조회할 수 있습니다.

뷰의 제약 조건은 데이터의 무결성을 유지하고 보다 안전한 데이터 조작을 가능하게 해줍니다. 따라서 뷰를 사용할 때는 데이터의 유효성을 보장하기 위한 적절한 제약 조건을 설정하는 것이 좋습니다.

참고문헌: