데이터모델
<릴레이션의 특징>
- 속성은 단일 값을 가진다.
각 속성의 값은 도메인에 정의된 값만을 가지며, 그 값은 모두 단일 값이여야 함.
- 속성은 서로 다른 이름을 가진다.
- 한 속성의 값은 모두 같은 도메인 값을 가진다.
한 속성에 속한 열은 모두 그 속성에서 정의한 도메인 값만 가질 수 있음.
- 속성의 순서는 상관없다
속성의 순서가 달라도 릴레이션 스키마는 같음.
- 릴레이션 내의 중복된 tuple은 허용하지 않는다. (모든 속성의 값이 같은 경우 중복)
하나의 릴레이션 인스턴스 내에서는 서로 중복된 값을 가질 수 없음. 즉 모든 tuple은 서로 값이 달라야 함.
- tuple의 순서는 상관없다.
관계 데이터 모델
- 관계 데이터 모델은, 데이터를 2차원 테이블 형태인 릴레이션으로 표현함.
- 릴레이션에 대한 제약조건과 관계 연산을 위한 관계대수를 정의함.
🔑키
- 특정 tuple을 식별할 때 사용하는 속성 혹은 속성의 집합
- 릴레이션은 중복된 tuple을 허용하지 않기 때문에, 각각의 tuple에 포함된 속성들 중 최소 하나 이상은 값이 달라야 함.
즉, 키가 되는 속성(혹은 속성의 집합)은 반드시 tuple들을 서로 구별할 수 있어야 함
- 키는 릴레이션 간의 관계를 표현하는데 사용됨
* 슈퍼키 -> 多
- 릴레이션 내 tuple을 식별할 수 있는 속성의 집합
* 후보키
- tuple을 식별할 수 있는 속성의 최소 집합
- 유일성과 최소성을 모두 만족시켜야 함
* 기본키
- 후보키 중 선정된 키
* 대체키
- 기본키로 선정되지 않은 후보키
그 외)
* 복합키
- 2개 이상의 속성으로 이루어진 키 ex - (고객번호, 도서번호)
* 대리키 / 인조키
- 기본키가 보안을 요하거나, 여러 개의 속성으로 구성되어 복잡하거나, 마땅한 기본키가 없을 때
일련번호 같은 가상의 속성을 만들어 기본키로 삼는 것.
* 외래키
- 다른 릴레이션의 기본키를 참조하는 속성
- 릴레이션 간의 관계(relationship)를 표현함
< 외래키의 특징 >
- 관계 데이터 모델의 릴레이션 간의 관계를 표현함
- 다른 릴레이션의 기본키를 참조하는 속성
- 참조하고(외래키) 참조되는(기본키) 양쪽 릴레이션의 도메인은 서로 같아야 함
- 참조되는(기본키) 값이 변경되면 참조하는(외래키) 값도 변경됨
- NULL 값과 중복 값 등이 허용됨
- 자기 자신의 기본키를 참조하는 외래키도 가능
- 외래키가 기본키의 일부가 될 수 있음
* 기본키 선정 시 고려사항
- 릴레이션 내 tuple을 식별할 수 있는 고유한 값을 가져야 함
- NULL 값은 허용하지 않음
- 키 값의 변동이 일어나지 않아야 함
- 최대한 적은 수의 속성을 가진 것이여야 함
- 향후 키를 사용하는데 있어서, 문제 발생 소지가 없어야 함 (주민번호를 기본키로 안쓰는 이유)
* 릴레이션 스키마를 표현할 때, 기본키는 밑줄을 그어 표시함
고객(고객번호, 이름, 주민번호, 주소, 핸드폰)
도서(도서번호, 도서이름, 출판사, 가격)
* 무결성 제약조건
- 무결성 = 일관성 + 정확성
1. 도메인 무결성 제약조건
- 도메인 제약
- 릴레이션 내의 tuple들이 각 속성의 도메인에 지정된 값만을 가져야 한다. (ex. 나이는 200이 될 수 없다.)
2. 개체 무결성 제약조건
- 기본키 제약
- 기본키는 NULL 값을 가져서는 안되며, 릴레이션 내에 오직 하나의 값만 존재해야 한다.
3. 참조 무결성 제약조건
- 외래키 제약
- 릴레이션 간의 참조 관계를 선언하는 제약조건
- 자식 릴레이션의 외래키는 부모 릴레이션의 기본키와 도메인이 동일해야하며,
자식 릴레이션의 값이 변경될 때 부모 릴레이션의 제약을 받는다.
* 개체 무결성 제약조건
- 삽입 : 기본키 값이 같으면 삽입이 금지됨.
- 수정 : 기본키 값이 같거나 NULL로도 수정이 금지됨.
- 삭제 : 특별한 확인이 필요하지 않으며 즉시 수행함.
<삽입>
- 학과(부모 릴레이션) : 투플 삽입한 후 수행하면 정상적으로 진행된다.
- 학생(자식 릴레이션) : 참조받는 테이블에 외래키 값이 없으므로 삽입이 금지된다.
<삭제>
- 학과(부모 릴레이션) : 참조하는 테이블을 같이 삭제할 수 있어서 금지하거나 다른 추가 작업이 필요함.
- 학생(자식 릴레이션) : 바로 삭제 가능함.
※ 부모 릴레이션에서 투플을 삭제할 경우 참조 무결성 조건을 수행하기 위한 고려사항
- 즉시 작업을 중지
- 자식 릴레이션의 관련 투플을 삭제
- 초기에 설정된 다른 어떤 값으로 변경
- NULL 값으로 설정
명령어 | 의미 | 예 |
RESTRICTED | 자식 릴레이션에서 참조하고 있을 경우 부모 릴레이션의 삭제 작업을 거부함 |
학과 릴레이션의 투플 삭제 거부 |
CASCADE | 자식 릴레이션의 관련 투플을 같이 삭제 처리함 | 학생 릴레이션의 관련 투플을 삭제 |
DEFAULT | 자식 릴레이션의 관련 투플을 미리 설정해둔 값으로 변경함 | 학생 릴레이션의 학과가 다른 학과로 자동 배정 |
NULL | 자식 릴레이션의 관련 투플을 NULL 값으로 설정함(NULL 값을 허가한 경우) | 학과 릴레이션의 학과가 NULL 값으로 변경 |
<수정>
- 삭제와 삽입 명령이 연속해서 수행됨.
- 부모 릴레이션의 수정이 일어날 경우 삭제 옵션에 따라 처리된 후 문제가 없으면 다시 삽입 제약조건에 따라 처리됨.