관계형 데이터모델
- 현재 가장 많이 사용되는 데이터베이스 모델
- 데이터가 최소한의 의미를 가지는 테이블 형태들로 표현
- 사용자가 데이터를 쉽게 다룰 수 있도록 해주는 질의어(SQL) 제공
SQL(Structed Query Language)
- 자연어에 가까운 문법(배우기가 쉽고 용이하다.)
- 데이터를 어떻게 가져올 것인가 대신에 어떤 데이터를 원하는 지만 기술
--> 사용자나 개발자의 입장에서 데이터를 다루는 작업이 매우 단순해짐
- 명령어나 문법이 표준화되어 있다.
릴레이션(relation)
- 테이블
- 현실 세계의 개체를 표현
- 관계형 데이터베이스에서 정보를 구분하여 저장하는 기본 단위
ex)
student 릴레이션 : 학생에 관한 정보를 저장
subject 릴레이션 : 과목에 대한 정보를 저장
- 동일한 데이터베이스 내에서는 같은 이름을 갖는 릴레이션이 존재할 수 없다.
튜플(tuple)
- 개체에 속한 구성원들 개개의 정보를 표현(레코드)
ex) '학생'은 개체를 나타내는 이름이고 '김철수', '박지원',...은 '학생' 개체의 구성원
- 한 릴레이션에 포함된 튜플의 개수는 시간에 따라 변할 수 있으며, 한 릴레이션은 여러 개(수십~수십만 개)의 튜플을 포함할 수 있음
속성(attribute)
- 릴레이션에서 관리하는 구체적인 정보 항목(필드)
- 현실 세계의 개체(예 : 학생, 교수, 과목,...)들은 많은 속성들을 갖는데 그 중에서 관리해야 할 필요가 있는 속성들만을 선택하여 릴레이션에 포함
- 속성 역시 고유한 이름을 가지며 동일 릴레이션 내에서는 같은 이름의 속성이 존재할 수 없음
도메인(domain)
- 각각의 속성들이 가질 수 있는 값들의 집합
- 필요이유
-> 저장되는 데이터 값들이 본래 의도했던 값들만 저장되고 관리되도록 하는 데 있음
ex) '성별'이라는 속성이 있다면 이 속성이 가질 수 있는 값은 {남, 여}
- 도메인의 이름은 속성 이름과 같거나 다를 수 있음
- 현실적으로 도메인을 구현하는 것은 어려움(ex : 이름, 주소)
-> 대부분의 DBMS 제품에서는 사용자 정의 데이터 타입을 사용
ex) 데이터 타입과 길이를 미리 지정, 데이터 값의 범위를 지정
** 릴레이션 = 테이블 / 속성 = 열, 컬럼 / 튜플 = 행
키(key)
키의 필요성
튜플의 중복 여부를 알아내기 위해서는 삽입하고자 하는 튜플과 이미 존재하는 모든 튜플을 일일이 비교해야 하는데 이는 비현실적이다. 키는 중복여부를 효과적으로 알 수 있도록 하는 수단이 된다.
후보키(candidate key)
- 테이블에서 각 튜플을 구별하는데 기준이 되는(기본키가 될 수 있는) 하나 혹은 그 이상의 컬럼들의 집합
- 후보키는 테이블에 있는 각 튜플을 고유하게 식별할 수 있어야 한다.
- 위 STUDENT 테이블의 경우 SID(학번)이 후보키
- 튜플의 중복 여부 확인 시 기존 튜플의 모든 컬럼 값을 비교하는 대신 후보키 컬럼의 값과 비교
- 기본키(primary key), 대체키(alternate key)로 구분
기본키(primary key)
- 후보키 중 튜플을 식별하는데 기준으로 사용할 키 : NOT NULL, NO DUPLICATE
- 일반적으로 정보를 검색하는 기준
- 중복된 튜플이 입력되는 것을 방지
- 모든 테이블에는 적어도 하나의 기본키가 존재
대체키(alternate key)
후보키 중 어느 키를 중복키로 정할까?
- 명확히 정해진 규칙은 없다.
- 해당 테이블을 대표할 수 있는 것
- 데이터 길이가 짧을 것
- 빈번히 사용되는 컬럼
복합키(composite key)
- 하나의 컬럼이 후보키의 역할을 하지 못하고 두 개 이상의 컬럼이 합쳐져야 후보키의 역할을 하는 경우
외래키(foreign key)
- 상호 관련이 있는 테이블들 사이에서 데이터의 일관성을 보장해 주는 수단
- 관계는 업무적인 연관성을 의미
- 두 테이블 사이에 존재하며 관계를 맺고 있는 두 테이블 중 하나는 부모 테이블이고 하나는 자식테이블
- 부모테이블의 기본키는 자식테이블에 외래키로 전이
-> 두 테이블간에 외래키에 의한 참조관계에 있을 때 두 테이블간 데이터 불일치가 발생하는 상황이 되면 DBMS는 제한(restrict), 연쇄(cascade), null값으로 대체(nullify) 의 조치를 취한다.
참조 무결성 제약조건
외래키를 통해 두 테이블간의 데이터 무결성을 유지하는 것
데이터 무결성
- 참조 무결성
1) 자식테이블의 데이터를 입력하거나 수정할 때 부모테이블을 검증
2) 부모테이블의 데이터를 수정하거나 삭제할 때 자식테이블을 검증
- 개체 무결성
- 도메인 무결성