본문 바로가기
데이터 [Data]/데이터베이스론

데이터베이스론 보고서 5 : Join을 할 때 사용되는 제약조건

by 냉철하마 2021. 7. 12.

자료출처: MS SQL 기반 데이터베이스 배움터 (생능출판사) http://www.yes24.com/Product/Goods/7489842?OzSrank=1

 

데이터베이스 배움터 - YES24

이론과 실무가 조화된 최적의 데이터베이스 책데이터베이스를 제대로 활용하는 데 반드시 필요한 데이터베이스의 기본적인 개념 및 이론을 이해하기 쉽게 설명한 책이다. 이와 함께 활용 기술

www.yes24.com

 

  관계대수의 연산자 중 하나인 조인 연산자는 두 개의 릴레이션으로부터 연관된 투플들을 결합하는 연산자이다. 연관된 투플들을 다루기 때문에 두 이상의 릴레이션들의 관계를 다루는 데 매우 중요한 연산자로서 사용된다. 이러한 조인 연산자에는 세타 조인(theta join), 동등 조인(equijion), 자연 조인(natural join), 외부 조인(outer join), 세미 조인(semijoin) 등이 있다.

  예를 들어, 두 릴레이션 R(A1, A2, , An)S(B1, B2, , Bm)인 세타 조인의 결과는 차수가 n+m, 애트리뷰트는 (A1, A2, , An, B1, B2, , Bm), 조인 조건들을 만족하는 투플들로 이루어진 릴레이션이라고 할 수 있다. 이 때 세타는 기호 θ에서 온 것으로, 세타 자리에 {=, <>, <=, <, >=, >} 중 하나의 기호가 들어간다. 추가로, 동등 조인은 세타 자리에 비교 연산자가 =인 조인이 들어갔다고 할 수 있다. 동등 조인의 결과 릴레이션에서 조인 애트리뷰트를 제외한 조인을 자연 조인이라고 하는데, 여러 가지 조인 연산자들 중에서 가장 자주 사용되는 조인 연산자이다.

  외부 조인은 상대 릴레이션에서 대응되는 투플을 갖지 못하는 투플이나 조인 애트리뷰트에 널값이 들어있는 투플들을 다루기 위해 조인 연산을 확장한 조인이다. 두 리레이션에서 대응되는 투플들을 결합하면서, 대응되는 투플들을 갖지 않는 투플과 조인 애트리뷰트에 널값을 갖는 투플도 결과에 포함시킨다. 외부 조인의 종류로는 왼쪽 외부 조인(left outer join), 오른쪽 외부 조인(right outer join), 완전 외부 조인(full outer join)이 존재한다.

 

  제약조건은 일반적으로 릴레이션이 생성될 때 명시하지만, 릴레이션이 생성된 후에도 추가할 수 있다. 이러한 릴레이션 정의에서 다양한 제약조건을 명시할 수 있는데, 애트리뷰트의 제약조건, 기본 키 제약조건, 참조 무결성 제약조건 등이 있다. 아래 그림은 다양한 제약조건을 명시한 코드들이다.

  먼저 애트리뷰트의 제약조건인데, 이 제약조건들은 위 그림처럼 다양하게 존재한다. 첫째, 애트리뷰트는 디폴트로 널값을 가질 수 있기 때문에 만일 어떤 애트리뷰트에 널값을 허용하지 않으려면 (1)처럼 ‘NOT NULL’을 명시해야 한다. 둘째, NOT NULL을 명시하지 않았다면 한 개의 투플에서는 이 애트리뷰트에 널값을 가질 수 있는데, 여기서 (2)처럼 한 릴레이션에 UNIQUE절을 여러 개 명시할 수 있다. 셋째, 애트리뷰트에 널값 대신에 특정 값을 디폴트 값으로 지정할 수 있는데, 애트리뷰트의 이름과 데이터 타입을 명시한 곳에서는 (3)과 같이 어디서든지 DEFAULT절을 사용하여 디폴트 값을 지정할 수 있다. 넷째, CHECK 절에서는 한 애트리뷰트가 가질 수 있는 값들의 범위를 (4), (5)처럼 지정해준다.

  기본 키 제약조건은 (6)번과 같이 명시해줄 수 있다. 기본 키는 엔티티 무결성 제약조건에 의해 널값을 가지지 않아야 하므로 (1)에서 NOT NULL을 명시한 EMPNO 애트리뷰트를 기본 키로 지정하여 준다. 이러한 기본 키에는 자동적으로 인덱스가 생성된다.

  참조 무결성 제약조건은 그림의 (7), (8)과 같이 CREATE TABLE문에서 릴레이션을 정의하면서 명시한다. 한 릴레이션에 들어 있는 외래 키의 개수만큼 참조 무결성 제약조건을 명시할 수 있는데, 이는 외래 키의 무결성을 보장한다. 참조 무결성 제약조건을 보존하기 위해 데이터베이스가 갱신된 후에 검사를 수행해야 하는데, 이 때 삭제 연산과 수정 연산은 이 제약조건을 위배할 수도 있다. 그래서 (9)와 같이 참조되는 릴레이션에서 투플이 삭제되거나 수정될 때, 참조하는 릴레이션에서 어떻게 동작할 것인가를 명시해야 한다.

  Join을 할 때도 제약조건은 위와 마찬가지로 다양하게 사용될 것이다. 두 릴레이션의 여러 애트리뷰트가 조인될 때의 제약조건도 적용될 것이고, 릴레이션마다 하나씩 기본 키가 있어야 하기 때문에 기본 키 제약조건도 필요할 것이며, 참조하는 릴레이션과 참조되는 릴레이션 간의 관계도 조인 연산을 하면서 중요한 부분이기 때문에 참조 무결성 제약조건 역시 사용될 것이다.

  아래 예시는 조인 질의를 사용한 SELECT 문이다.

  릴레이션 EMPLOYEE의 기본 키 EMPNO 애트리뷰트는 엔티티 무결정 제약조건에 의해 널값을 갖지 않아야 하므로 그림 4.7에서 NOT NULL을 명시해줬다. 릴레이션 DEPARTMENT의 기본 키 DEPTNO는 릴레이션 EMPLOYEE의 애트리뷰트 DNO와 조인할 때 참조 무결성 릴레이션에 의해 참조되는 애트리뷰트는 참조되는 릴레이션에서 동일한 데이터 타입을 가지면서 UNIQUE 또는 기본 키로 정의되어 있어야 하는 것 또한 그 예시가 될 수 있다.

댓글