0. 관계 데이터 모델
: 제안된 데이터 모델들 중 가장 개념이 단순한 데이터 모델.
- IBM연구소의 E.F. Codd가 1970년 제안.
- 관계 DBMS 시제품: System R(1970년대, IBM연구소) → Oracle로 나중에 시중에 등장
- 1980년대 후반 여러 데이터 모델들이 새로 등장했지만 관계 DBMS가 여전히 널리 사용됨.
1. 관계 데이터 모델이 큰 성공을 거둔 요인(7)
- 간단한 테이블을 사용
- 중첩된 복잡한 구조가 없음
- 집합 위주로 뎅터를 처리
- 초보 사용자도 쉽게 이해
- 표준 데이터베이스 응용에 대해 좋은 성능을 보임
- 다른 데이터 모델에 비해 이론이 잘 정립됨.
- 설계와 질의 처리면에서 뛰어난 장점을 가짐.
2-1 관계 데이터 모델의 개념
1. 관계 데이터 모델 개념(5)
- 동일한 구조로 모든 데이터를 논리적으로 구성
- 선언적인 질의어로 데이터 접근.
- 응용 프로그램들은 db 내의 레코드들의 순서와 무관하게 작성됨.
- 사용자가 원하는 데이터(what)만 명시하고, 이를 어떻게 찾을지(how)는 명시할 필요 없음.(이는 DBMS의 역할)
- 논리적으로 연관된 데이터를 연결하기 위해 링크나 포인터를 사용하지 않음.
2. 기본적인 용어(4)
- 릴레이션(relation): 테이블
- 레코드(record): 각 행
- 튜플(tuple): 각 행(레코드와 동일하나 좀 더 공식적인 용어)
- 애트리뷰트(attribute): 하나의 열
3. 릴레이션의 예
+ 차수(dgree)는 가변하지만 자주 바뀌지는 X. 유효한 릴레이션의 최소 차수 수는 1
+ 카다날리티는 쉽게 가변함. 유효한 릴레이션에서 카다날리티 수가 0일 수 있음.
+ 애트리뷰트에 자료형이 정해지면 해당 자료형을 갖는 데이터만 들어감.
4. 도메인(domain).
: 한 애트리뷰트에 나타날 수있는 값의 집합.
(실존하는 집합이라기 보다 개념정도로 알기)
ex. 위의 릴레이션의 예에서 대한민국 국민들은 모두 후보임. 모두 도메인임.
- 프로그래밍 언어의 데이터 타입과 유사.
- 동일한 도메인이 여러 애트리뷰트에서 사용될 수 있음
5. 널 값(null value)
: '알려지지 않음' or '적용할 수 없음'을 나타내기 위해 사용.
ex. 신입사원에게 DNO(부서 번호)가 결정 안 됨.
! 널 값은 0이나 공백 문자, 공백 문자열과는 다르다 !
6. 릴레이션 스키마와 릴레이션 인스턴스
(1) relation schema, 내포
: 릴레이션의 이름과 릴레이션의 애트리뷰트들의 집합. 기본 키 아래는 밑줄 표시
* 표기법: 릴레이션이름(애트리뷰트1, 애트리뷰트2, ...)
(2) relation instance, 외연
: 릴레이션에 어느 시점에 들어있는 튜플들의 집합. 시간의 흐름에 따라 계속 변함.
일반적으로 릴레이션에는 현재의 인스턴스만 저장.(history가 필요한 경우 별도의 테이블 사용.)
7. 관계 데이터베이스 스키마와 관계 데이터베이스 인스턴스
2-2 릴레이션의 특성
1. 릴레이션 특성(6)
- 각 릴레이션은 오직 하나의 레코드 타입만 포함.
- 한 애트리뷰트 내의 값들은 모두 같은 유형.
- 애트리뷰트들과 레코드의 순서는 중요하지 않음.(like 집합)
- 동일한 레코드가 두 개이상 존재하지 않음.(→ 키가 존재함!)
- 한 레코드의 각 애트리뷰트는 원자 값을 가짐.( 집합의 형태는 불가!!
- 각 애트리뷰트의 이름은 한 릴레이션 내에서만 고유
2-3 릴레이션의 키
1.릴레이션의 키
: 각 레코드들을 고유하게 식별할 수 있는 하나 이상의 애트리뷰트들의 모임. 키의 종류는 구분할 줄 알아야한다.
2. 슈퍼 키(super key)
: 한 릴레이션 내의 특정 레코드를 고유하게 식별하는 애트리뷰트(한 개 or 집합)
- 레코드를 고유하게 식별하는데 꼭 필요하지않은 애트리뷰트를 포함할 수도.(아래의 경우 주소)
ex. 신용카드 회사의 고객 릴레이션에서 (신용카드번호, 주소) 또는 (주민등록번호)
3.후보 키(candiate key)
: 각 레코드를 고유하게 식별하는 최소한의 애트리뷰트들의 모임.
- 모든 릴레이션에는 최소 한 개 이상의 후보 키가 있음.
- 후보 키도 두 개 이상의 애트리뷰트로 이뤄질 수 있음. → 복합 키
ex. (신용카드번호, 주소)는 후보 키가 아니지만, (신용카드번호)는 후보키.
(신용카드번호, 주민등록번호)는 복합키.
4. 기본 키(primary key)
: 한 릴레이션에 후보 키가 두 개 이상 있으면, 설계자가 이 중 하나를 기본 키로 선정.
- 자연스러운 기본 키를 찾을 수 없는 경우에는 레코드 번호와 같이 인위적인 키 애트리뷰트를 추가할 수도 있음.
이러한 인위적인 키를 "대리키"라고 함.(ex. 책 바코드 번호)
ex. 신용카드번호 or 주민등록 번호.
5. 대체 키(alternate key)
: 기본키가 아닌 후보키
ex. 만약 주민등록번호가 기본 키로 선정되면, 신용카드번호가 대체 키임.
6. 외래 키(foreign key)
: 어떤 릴레이션의 기본키를 참조하는 애트리뷰트.
- 릴레이션들 간의 관계를 나타내기 위해 사용.
- 외래키 애트리뷰트는 참조되는 릴레이션의 기본 키와 동일한 도메인을 가져야함.
- 외래키의 유형(3)
① 다른 릴레이션의 기본키를 참조하는 외래 키
② 자체 릴레이션의 기본키를 참조하는 외래 키
③ 기본 키의 구성요소가 되는 외래 키
2-4 무결성 제약 조건
1. 데이터 무결성(data inegrity)(4)
: 데이터의 정확성 또는 유효성을 의미. 일관된 데이터 베이스 상태를 정의하는 규칙들을 정의.
(db가 갱신될 때 DBMS가 자동적으로 일관성 조건을 검사함.
→응용 프로그램들은 일관성 검사할 필요 x → 코드가 단순해지고 생산성 높아짐.)
- 도메인 제약조건
- 키 제약조건
- 기본 키와 엔티티 무결성 제약조건
- 외래 키와 참조 무결성 제약조건
2. 도메인 제약조건
- 각 애트리뷰트의 값이 반드시 원자값이어야함.
- 애트리뷰트 값의 디폴트 값, 가능한 값의 범위 등을 지정할 수 있음.
- 데이터 형식으로 값들의 유형을 제한하고, CHECK 제약조건으로 값들의 범위를 제한할 수 있음.
- SQL2는 도메인을 명시적 정의하는 것을 허용하지만, 오라클은 지원하지 않음.
3.키 제약 조건
: 키 애트리뷰트에 중복된 값이 존재해서는 안됨.
4. 기본 키와 엔티티 무결성 제약 조건
: 기본 키를 구성하는 어떤 애트리뷰트도 널값을 가질 수 없음.
5. 외래 키와 참조 무결성 제약조건
: 두 릴레이션의 연관된 레코드 사이의 일관성을 유지하는데 사용됨.
R2의 외래 키가 릴레이션 R1의기본 키를 참조할 때 참조 무결성 제약조건은 아래의 조건 중 하나가 성립되면 만족.
- 외래 키의 값은 R1의 어떤 레코드의 기본 키값과 같다.
- 외래 키가 자신을 포함하고 있는 릴레이션의 기본 키를 구성하고 있지 않으면 널값을 가진다.
6. 무결성 제약조건의 유지
: DBMS는 갱신 연산(3)에 대해 무결성 제약조건을 만족하도록 조치를 취함.
7. DBMS 갱신 연산(3)
① 삽입
● 참조 되는 릴레이션에 삽입:
- 위배 가능성 X: 참조 무결성 제약조건
- 위배 가능성 O: 도메인 제약조건, 키 제약조건, 엔티티 무결성 제약조건
● 참조 하는 릴레이션에 삽입:
- 위배 가능성 O: 도메인 제약조건, 키 제약조건, 엔티티 무결성 제약조건, 참조 무결성 제약조건
② 삭제
● 참조 되는 릴레이션에 삭제:
- 위배 가능성O: 참조 무결성 제약조건
● 참조 하는 릴레이션에 삭제:
- 위배 가능성 X: 도메인 제약조건, 키 제약조건, 엔티티 무결성 제약조건, 참조 무결성 제약조건
③ 수정
: 수정하는 애트리뷰트가 기본키도, 외래 키도 아니면 참조 무결성 제약조건을 위배하지 않음.
그러나 기본키, 외래 키면 제한, 연산, 널값, 디폴트 값 규칙이 적용됨.
8. 참조 무결성 제약 조건을 만족시키기 위해서 DBMS가 제공하는 옵션(4)
(자세한 예시는 교재 보기!)
- 제한(restricted): 위배를 야기한 연산을 단순히 거절
- 연쇄(cascade): 참조되는 릴레이션에서 튜플을 삭제, 참조하는릴레이션에서 이튜플을 참조하는 튜플도 삭제
- 널값(nullify): 참조되는 릴레이션에서 튜플을 삭제하고, 참조하는 릴레이션에서 이 튜플을 참조하는 튜플의 외래키에 널값 삽입
- 디폴트값(default): 널값 대신 디폴트 값 삽입
'Computer Science > DataBase' 카테고리의 다른 글
[데이터베이스] 5장 데이터베이스 설계와 ER모델 (1) (0) | 2023.11.25 |
---|---|
[데이터베이스] 4장 관계 대수와 SQL (0) | 2023.11.03 |
[데이터베이스] 3장 오라클 (0) | 2023.11.02 |
[데이터베이스] 1장 데이터베이스 시스템 (2) (0) | 2023.10.10 |
[데이터베이스] 1장 데이터베이스 시스템 (1) (4) | 2023.09.23 |