관계 데이터 모델의 개념
관계 데이터 모델의 용어
- 속성
- 릴레이션의 열을 속성 또는 에트리뷰트라고 부른다. 릴레이션은 파일 관리 시스템의 파일, 속성은 필드에 대응한다.
- 투플
- 릴레이션의 행을 투플이라고 부른다. 릴레이션에서 투플은 개체의 인스턴스이며 파일 관리 시스템에서 레코드에 대응한다.
- 도메인
- 속성 하나가 가질 수 있는 모든 값의 집합을 해당 속성의 도메인이라 한다. 관계 데이터 모델에서는 더는 분해할 수 없는 원자값만 속성으로 사용할 수 있다. 도메인은 가능한 값을 일일이 나열하기 어려운 경우가 많으므로 속성을 고려한 데이터 타입으로 정의한다. (등급 속성 : vip, gold, silver, bronze -> 고객 아이디 : CHAR(20))
- 또한, 도메인을 타입으로 정의하면 연산 가능 여부를 쉽게 판단할 수 있다.
- 널값
- 릴레이션에 있는 특정 투플의 속성값을 모르거나, 적합한 값이 없는 경우에는 널이라는 특별한 값을 사용할 수 있다.
- 널 값은 DBMS마다 내부적으로 표시하는 기호가 다르다.
- 차수
- 하나의 릴레이션에서 속성의 전체 개수를 릴레이션의 차수라고 한다. 모든 릴레이션은 최소 1 이상의 차수를 유지해야 하며
- 일반적으로 자주 변하지 않는다는 정적인 특징이 있다.
- 카디널리티
- 하나의 릴레이션에서 투플의 전체 개수를 릴레이션의 카디널리티라고 한다. 투플이 없는 릴레이션이 존재할 수도 있고
- 투플의 삽입, 삭제가 빈번하게 일어나기에 동적인 특징이 있다.
릴레이션과 데이터베이스의 구성
- 릴레이션 스키마
- 릴레이션 스키마는 릴레이션의 이름과 릴레이션에 포함된 모든 속성의 이름으로 정의하는 릴레이션의 논리적 구조이다.
- 따라서 릴레이션 스키마를 보면 릴레이션의 구조를 쉽게 파악할 수 있다.
- 릴레이션 스키마는 일반적으로는 "릴레이션 이름(애트리뷰트 이름1, .... 에트리뷰트 이름n) 으로 표현된다.
- 릴레이션 인스턴스
- 릴레이션 인스턴스는 어느 한 시점에 존재하는 투플들의 집합이다. 릴레이션 인스턴스에 포함된 투플은 릴레이션 스키마에서 정의하는 각 속성에 대응하는 실제 값으로 구성되어 있다.
- DBMS 내부적으로 데이터 조작어를 이용해서 인스턴스의 투플을 검색, 삽입, 삭제, 수정을 수행한다.
- 데이터베이스 스키마와 데이터베이스 인스턴스
- 일반적으로 데이터베이스는 릴레이션 여러 개로 구성된다.
- 데이터베이스 스키마는 릴레이션의 스키마를 모두 모아놓은 것이다.
- 데이터베이스 인스턴스는 특정 시점에 데이터베이스에 저장된 데이터의 전체 집합을 의미한다.
릴레이션의 특성
- 투플의 유일성 : 하나의 릴레이션에는 동일한 투플이 존재할 수 없다.
- 하나의 릴레이션에는 똑같은 투플이 있으면 안 되고 모든 투플에는 다른 투플과 구별되는 유일한 특성이 있어야 한다.
- 관계 데이터 모델에서는 하나 또는 여러 속성을 미리 선정해 두고 이 속성의 값으로 유일성을 판단하며 이를 키라고 한다.
- 투플의 무순서 : 하나의 릴레이션에서 투플 사이의 순서는 무의미하다.
- 데이터베이스는 위치가 아닌 내용으로 검색되므로 투플의 순서는 중요하지 않다.
- 릴레이션에는 투플이 삽입 순서에 따라 저장되지만, 효율적인 처리를 위해 투플의 순서를 임의로 바꾸기도 한다.
- 속성의 무순서 : 하나의 릴레이션에서 속성 사이의 순서는 무의미하다.
- 속성은 순서가 바뀌더라도 다른 릴레이션이 될 수 없고, 순서와 상관없이 같은 속성들로 구성되어 있어야 같은 릴레이션이다.
- 속성 값은 릴레이션에서 위치가 아닌 속성의 이름으로 접근하므로 이름이 같은 속성이 존재할 수 없고, 이름도 의미가 명확하게 지어야 한다.
- 속성의 원자성 : 속성 값으로 원자 값만 사용할 수 있다.
- 모든 속성 값은 더는 분해할 수 없는 하나의 값인 원자 값만 가질수 있어 다중 값을 가질 수 없다.
키의 종류
- 슈퍼키
- 슈퍼키는 유일성의 특성을 만족하는 속성 또는 속성들의 집합이다. 유일성은 하나의 릴레이션에서 키로 지정된 속성 값은 투플마다 달라야 한다는 의미를 가진다.
- 릴레이션에서 다른 투플과 구별할 수 있는 속성은 모두 슈퍼키가 될 수 있다. 만약 유일성을 만족하는 속성이 없다면 두 개 이상의 속성을 조합해서 사용할 수 있다.
- 후보키
- 후보키는 유일성과 최소성을 만족하는 속성 또는 속성의 집합이다. 최소성은 꼭 필요한 최소한의 속성들로만 키를 구성하는 것을 말한다. 따라서 하나의 속성으로만 이루어진 키는 당연히 최소성을 만족한다.
- 만약 하나의 속성으로 유일성을 만족하는 키와, 두가지 속성을 조합한 키가 있다면 두 가지 속성을 조합한 키는 후보키가 될 수 없다.
- 후보키를 선정할 때는 현재의 릴레이션 인스턴스만 보고 유일성과 최소성을 판단하지 말고 전체 환경을 고려해야 한다.
- 기본키
- 기본키는 여러 후보키중 기본적으로 사용할 키를 말한다. 만약 후보키가 한 개만 존재한다면 자연스럽게 그 후보키가 기본키가 되지만 후보키가 여러 개라면 가장 적합한 후보키를 기본키로 선정해야 한다.
- 선택한 기본키는 속성 이름에 밑줄을 그어 표현한다.
- 기본키 선택의 기준
- 널 값을 가질 수 있는 속성이 포함된 후보키는 기본키로 부적합하다.
- 값이 자주 변경될 수 있는 속성이 포함된 후보키는 기본키로 부적합하다.
- 단순한 후보키를 기본키로 선택한다
- 대체키
- 대체키는 기본키를 대체할 수 있지만 기본키로 선정되지 못한 후보키들이다.
- 외래키
- 외래키는 어떤 릴레이션에 소속된 속성 또는 속성 집합이 다른 릴레이션의 기본키가 되는 키이다.
- 외래키가 다른 릴레이션의 대체키를 참조하는것도 가능하다. 대체키를 참조하더라도 투플을 구분할 수 있기 때문이다.
- 외래키를 통해 릴레이션끼리 관계를 맺게 되는데, 외래키를 가진 릴레이션을 '참조하는 릴레이션' 이라 하고 기본키를 가진 릴레이션을 '참조되는 릴레이션'이라 한다.
- 외래키가 되는 속성의 이름과 기본키가 되는 속성의 이름은 달라도 되지만 도메인은 반드시 같아야 한다. 도메인이 같아야 연관성 있는 투플을 찾을 수 있기 때문이다.
- 참조되는 릴레이션의 기본키가 아닌 다른 속성을 외래키가 참조한다면 연관성 있는 투플을 검색하기가 어렵기 때문에 외래키는 반드시 다른 릴레이션의 기본키를 참조해야 한다.
- 하나의 릴레이션에는 외래키가 여러개 존재할 수도 있으며 외래키를 기본키로 사용할 수도 있고 외래키를 포함하여 기본키를 구성할 수도 있다.
- 참조하는 릴레이션과 참조되는 릴레이션이 같을 수도 있다.
- 외래키는 기본키를 참조하지만 기본키가 아니기 때문에 널 값을 가질 수 있으며 서로 다른 투플이 같은 값을 가질 수 있다.
관계 데이터 모델의 제약
개체 무결성 제약조건
- 개체 무결성 제약조건은 기본키를 구성하는 모든 속성은 널 값을 가지면 안 된다는 규칙이다.
- 기본키가 널 값이 되면 투플의 유일성을 판단할 수 없기 때문이다.
- DBMS는 사용자가 기본키로 사용할 속성을 알려주면 기본키가 널 값일때 자동으로 연산의 수행을 거부한다.
참조 무결성 제약조건
- 참조 무결성 제약조건은 외래키는 참조할 수 없는 값을 가질 수 없다는 규칙이다.
- 외래키는 다른 릴레이션의 기본키를 참조하는 속성이고 릴레이션간 관계를 표현하는 역할을 한다. 그러므로 외래키는 자신이 참조하는 릴레이션에 기본키 값으로 존재하는 값, 참조 가능한 값만 가져야 한다.
- 외래키가 널 값을 가진다고 해서 무조건 참조 무결성 제약조건을 위반했다고 볼 수 없다. 참조하는 속성의 값 중 어떤 값인지 모를 뿐이지 존재하지 않는 값이라고 볼 수는 없기 때문이다.
- 데이터베이스의 상태가 변해도 참조 무결성 제약조건을 만족시켜야 한다.
- 만약 주문 릴레이션에 고객 릴레이션에는 존재하지 않는 아이디를 삽입하는 연산은 참조 무결성 제약조건 위반이므로 수행을 거부한다.
- 마찬가지로 주문 릴레이션에 주문고객이 apple인 고객이 존재하는데 고객 릴레이션에서 apple인 투플을 삭제하면 존재하지 않는 고객이 주문한 내역이 되므로 참조 무결성 제약조건 위반이므로 수행을 거부한다.
- 이러한 경우 고객 릴레이션 삭제와 주문 릴레이션에서 삭제하거나, 주문 고객의 속성값을 널이나 기본값으로 지정하는 방법을 사용할 수도 있다.
- 고객 릴레이션의 기본키를 변경한다면 이에 연관된 주문 릴레이션에 외래키 값도 함께 변경되어야 한다.
- 기본키가 아닌 속성의 값을 변경하는것은 어떤 제약조건도 위반하지 않는다.
- 이러한 제약 조건은 DBMS가 자동으로 수행하므로 사용자는 DBMS에게 어떤 속성이 기본키와 외래키인지 알려주면 되고, 제약조건 위반 시 원하는 처리 방법도 알려주면 된다.
Q & A
본 도서의 내용을 정리한것이 아닌 학습 스터디를 위해 제가 작성한 질답입니다.
사실과 다른 내용이 있다면 지적 부탁드립니다 :)
Q1 : 슈퍼키, 후보키, 기본키 차이점에 대해서 설명해 주세요.
슈퍼키는 유일성을 식별할 수 있는 속성 또는 속성의 집합이며, 후보키는 유일성과 최소성을 모두 만족시키는 속성 또는 속성의 집합입니다. 기본키는 후보키 중 사용환경과 전체적인 데이터를 고려하여 가장 적합한 키를 선택한 것입니다.
Q2 : 기본키 선정 기준에 대해서 설명해 주세요.
첫 번째로 널 값을 가질 수 있는 속성을 포함한 후보키는 제외해야 합니다. 기본키가 널 값을 가진다면 개체 무결성 제약조건 위반이기 때문입니다. 두 번째로는 데이터 타입이 단순한 후보키가 이용하기 편리하기 때문에 좋습니다. 세 번째로는 값이 자주 변경되지 않는 후보키가 좋습니다. 속성 값이 변경될 때마다 기본키 값으로 적절한지 확인해야 하기 때문입니다.
Q3 : 참조 무결성 제약조건에 대해 설명해 주세요.
참조 무결성 제약조건이란 외래키는 참조할 수 없는 값을 가질 수 없다는 규칙입니다. 외래키는 다른 릴레이션의 기본키를 참조하는 속성이고, 릴레이션 간 관계를 표현하는 역할을 합니다. 외래키가 참조할 수 없는 값을 가진다면 두 릴레이션을 연관시킬 수 없기 때문에 외래키 본래의 의미가 없어지기 때문에 외래키는 참조 가능한 값만 가져야 합니다.
출처 : 김연희, 데이터베이스 개론 3판, 한빛아카데미(2022)
'Database' 카테고리의 다른 글
[데이터베이스 개론] Chapter7 - 데이터베이스 언어 SQL (1) | 2023.05.12 |
---|---|
[데이터베이스 개론] Chapter6 - 관계 데이터 연산 (0) | 2023.04.26 |
[데이터베이스 개론] Chapter4 - 데이터 모델링 (0) | 2023.04.20 |
[데이터베이스 개론] Chapter3 - 데이터베이스 시스템 (0) | 2023.04.17 |
[데이터베이스 개론] Chapter2 - 데이터베이스 관리 시스템 (0) | 2023.04.17 |