데이터베이스
7. 관계형 데이터 베이스
관계형 데이터 모델
- 1970년에 IBM에서 처음 제안
- 외형적으로는 단순한 테이블을 표현
- 내부적으로는 릴레이션과 수학적인 이론을 기초로한다.
관계형 데이터모델에서 릴레이션은 2차원의 테이블을 의미한다.
테이블은 행(row)와 열(column)으로 이루어져 있다.
테이블 == 릴레이션
- 테이블의 열(필드)는 애트리뷰트(attribute)라고 한다.
- 테이블의 행(레코드)는 투플(tuple)이라고 한다.
- 모델에서 데이터의 값들은 애트리뷰트의 값(value)라고한다.
- 더 이상 분해할 수 없는 원자값(atomic value)만 허용
도메인(domain)
- 하나의 애트리뷰트가 취할 수 있는 같은 타입의 모든 원자들의 집합
- 하나의 도메인에 대해 둘 이상의 애트리뷰터가 정의될 수 있다.
- 여러 속성은 같은 도메인인 int로 정의 가능
한 릴레이션에는 모든 애트리뷰트들의 이름이 반드시 달라야한다.
릴레이션의 개념
릴레이션 R의 스키마(schema)
- 릴레이션 이름 R과 일정수의 애트리뷰트 A1,A2,...,An의 집합으로 구성된다
- 각 애트리뷰트 Ai(i=1,,,n)은 도메인 D1,D2...Dn 중 하나와 대응 된다.
- 하나의 투플은 각 애트리뷰트에 대응 하는 값 <v1,v2..vn>으로 구성된다
- 각 vi은 애트리뷰트 Ai의 값으로서 Ai를 정의하고 있는 도메인 Di의 한 원소값이다.
- 즉, vi는 어떤 애트리뷰트의 값이고, 어떤 도메인을 따른다.
릴레이션의 차수(degree)
릴레이션의 카디널리티(cardinality)
릴레이션의 특성
투플의 유일성(uniqueness of tuples)
- 한 릴레이션에 포함된 투플들은 모두 다르다.
- 똑같은 투플은 한 릴레이션의 포함될 수 없다.
- 수학적 의미에서 집합은 구분할 수 있는 원소의 모음이기 때문이다.
투플의 무순서성(no ordering of tuples)
- 한 릴레이션에 포함되어 있는 투풀 사이에는 순서가 없다.
애트리뷰트의 무순서성(no ordering of attributes)
- 한 릴레이션을 구성하는 애트리뷰트 사이에는 순서가 없다.
- 애트리뷰트는 순서가 아니라 이름에 의해 참조된다.
애트리뷰트의 원자성(atomicity of attributes)
- 모든 애트리뷰트의 값은 원자값(atomic value)이다.
- 한 애트리뷰트에 여러 값이 있을 순 없다.
릴레이션에서 반복 그룹(집합)은 DBMS에서 허용되지 않는다.
이러한 릴레이션을 정규화 릴레이션이라고 한다.
비정규 릴레이션을 정규 릴레이션으로 변환하는 과정을 정규화(normalization)이라고 한다.
릴레이션에는 애트리뷰트의 값이 없는 경우도 허용된다.
학사 관계형 데이터베이스
릴레이션 스키마
데이터베이스의 키
릴레이션의 특성 중 투플의 유일성으로 인해 한 릴레이션에 포함된 투플들은 모두 다르다.
-> 그 릴레이션을 구성하는 애트리뷰트를 사용하면 각 투플을 고유하게 식별할 수 있다
이러한 애트리뷰트 집합을 키(key)라고 한다.
키에는 기본키, 후보키, 대체키, 수퍼키, 외래키 등이 있다.
후보키(candidate key)
- 릴레이션에서 각 투플들을 유일하게 식별해 주는 애트리븉트의 조합
- 후보키는 두가지 성질을 만족해야한다.
- 유일성(uniqueness)
- 최소성(minimality)
- 투플을 식별하는데 꼭 필요한 애트리뷰드들로만 구성됨
학생 테이블에서 <학번>, <성명,학과>
만약 성명만으로 학생 투플을 유일하게 식별할 수 있다면, 성명 학과는 후보키가 될 수 없다...
왜?? 유일성만 있고 최소성이 없으니.. 이 경우 슈퍼키
후보키가 둘 이상이 되는 경우에 그 중 하나는 기본키(primary key) 나머지는 대체키(alternate key)가 된다.
기본키는 그 키값을 가진 투플을 바로 맵핑할 수 있다.
유일성은 만족하지만 최소성은 만족하지 않는 애트리뷰트의 집합은 슈퍼키(super key)라고 한다.
외래키(foreign key)
- 관계 릴레이션에서 개체들 간의 관계를 표현하는데 중요한 역할을 수행
- 일반적으로 두 릴레이션으로부터 의미있는 정보를 검색하기 위해 한 릴레이션의
기본키와 다른 릴레이션의 외래키를 비교한다.
- 즉 한 릴레이션에서 다른 릴레이션의 기본키를 슉 가져옴
- 그렇기 때문에 외래키를 참조하면 그 값은 무조건 존재해야한다.
외래키의 경우
다른 릴레이션의 기본키를 참조하는 외래키
- 즉, 릴레이션이 서로 다른 경우
- 릴레이션마다 어트리뷰트의 이름이 다를 수는 있지만, 값은 같아야한다
자체 릴레이션의 기본키를 참조하는 외래키
- 즉, 릴레이션이 서로 같은 경우
- 외래키가 속한 릴레이션과 기본키가 속한 릴레이션이 반드시 달라야 할 필요가 없다
- A 릴레이션의 기본키를 A릴레이션에서 외래키로 쓸 수도 있다.
무결성 제약 조건
데이터베이스에서 무결성이란 정확성이다
- 개체 무결성 제약조건과 참조 무결성 제약조건이 있다.
개체 무결성 제약조건(entity integrity constraints)
- 기본키에 속해 있는 애트리뷰트는 널 값이나 중복 값을 가질 수 없다
- 어떤 애트리뷰트를 기본키로 설정해놓으면 이 애트리뷰트는 무조건 키값이 되는 유일한 값이 입력되어 있어야 한다.
참조 무결성 제약조건(referential integrity constraints)
- 릴레이션은 참조할 수 없는 외래키 값을 가질 수 없다
- 투플 중 하나라도 다른 릴레이션에서 가진 값이 없다면, 이 애트리뷰트는 외래키가 될 수 없다.
데이터베이스가 연산을 통해 변경되어도 무결성 제약조건이 유지되어야한다.
- 어떤 외래키를 가진 릴레이션을 지우고 싶다면, 무결성이 위배되지 않도록 다른 릴레이션의 외래키를 지우거나 릴레이션을 지워야한다.