728x90
- 데이터베이스 시스템의 데이터 모델 중 가장 많이 사용되는 것이 관계 데이터 모델이다.
- 관계 데이터 모델은 테이블 형태로 데이터 간의 관계를 표현한다.
Relation
- relation은 row와 column으로 구성된 table을 말한다.
- 위 테이블은 고객의 주문 내역 정보를 담고 있는 릴레이션이다.
- 이 릴레이션은 주문번호, 고객코드, 제품코드, 수량, 가격이라는 5개의 집합으로 구성되어 있다.
- 각 집합의 값은 각각 다음과 같이 원소를 가지고 있다.
- 주문번호 = { ABCDE00001, ABCDE00002 }
- 고객코드 = { 123456, 654321 }
- 제품코드 = { 1002, 1004 }
- 수량 = { 10, 4 }
- 가격 = { 500000, 40000 }
- 첫 번째 행은 5개의 집합에서 각각 원소 1 개씩 선택하여 만들어졌는데, 이것이 원소들이 맺은 관계(relationship)이다.
- 릴레이션 스키마는 릴레이션의 데이터 구조를 뜻하며 저장된 데이터는 인스턴스라고 표현한다.
- 릴레이션 스키마의 요소
- 속성(attribute) ; 릴레이션 스키마의 열
- 도메인(domain) : 속성이 가질 수 있는 값의 집합, 더 나눌 수 없는 값(atomic)
- 수량, 가격, 단가는 원화 표시이기 때문에 둘다 ‘자연수’라는 도메인을 같는다.
- 즉, 이 릴레이션에서 수량, 가격, 단가는 ‘자연수’를 도메인으로 하는 attribute이다.
- 속성은 그 column의 원소들이 나타내는 값의 의미를 나타내고 도메인은 어떤 값들이 그 원소가 될 수 있는 지를 정의한다.
- 차수(degree) : 속성의 개수
- 투플(tuple) : 릴레이션의 행
- 카디날리티(cardinality) : 투플의 수
- 릴레이션(relation) : 투플의 집합(set of tuples)
- 릴레이션 용어는 일반적으로 잘 쓰이지 않는다. 같은 의미로 통용되는 다른 단어가 주로 쓰인다.
- table, row, column, header, data, record, field 정도의 용어가 자주 쓰인다.
- 위 표에 나온 정의대로 쓰인다기 보다는 table의 header, table의 field, table의 record 처럼 파일시스템 용어를 섞어 쓰기도 한다.
릴레이션의 특징
- 속성은 단일 값을 가진다.
- 속성은 서로 다른 이름을 가진다.(하지만 도메인은 같을 수 있다.)
- 한 속성의 값은 모두 같은 도메인 값을 가진다. (= 도메인이라는 집합에 있는 값을 가져야 한다)
- 속성의 순서는 상관없다. 속성의 순서가 달라도 릴레이션 스키마는 같은 것으로 본다. (주문번호, 고객번호) 와 (고객번호, 주문번호)는 같은 스키마이다.
- 릴레이션 내의 중복된 투플은 허용하지 않는다.
- 유니크한 키 값이 없으면 테이블 내에 같은 데이터를 가진 행이 존재할 수 있다.
- 하지만 이 경우에도 저장된 데이터들은 사용자가 입력하지 않았더라도 시스템 내부에선 각각 다른 index 번호를 가지기 때문에 사실은 다른 투플이라고 볼 수 있다.
- 투플의 순서가 달라도 같은 릴레이션이다. (즉, 정렬과 상관없다.)
Super Key
- relation에서 tuples를 unique하게 식별할 수 있는 attributes set(즉, 속성 하나여도 되고, 여러 개의 속성의 집합이어도 된다는 것)
- 위 테이블에선 ‘주문번호’가 super key가 될 수 있다.
- 마찬가지로 (주문번호, 고객코드) 또한 super key가 될 수 있다.
- 다만 키를 구성하는 속성이 많으면 그만큼 관계 표현이 복잡해지므로 최소한의 속성 집합에 관심을 갖는다.
Candidate Key
- 후보키(candidate key)는 투플을 유일하게 식별할 수 있는 속성의 최소 집합. 즉 위 테이블에선 ‘주문번호’만 해당된다. (주문번호, 고객코드)는 고객코드가 없어도 되기 때문에 ‘주문번호’가 유일하게 하나의 속성으로 투플을 식별할 수 있는 속성이므로 후보키가 될 수 있다.
Primary Key
- 투플들을 unique하게 식별하기 위해 채택된 candidate key
- 위에서는 ‘주문번호’만 될 수 있다.
Unique Key = Alternate key
- Primary Key가 아닌 candidate key
Foreign Key
- 다른 relation의 PK(primary key)를 참조하는 attributes set
- 위 주문정보 테이블에서 ‘고객코드’는 고객 정보 테이블이 있고 고객코드가 그 테이블의 PK라면 foreign key에 해당한다.
Constraints(제약조건)
- domain constraints : attribute의 value는 해당 attribute의 domain에 속한 value여야 한다.
- ‘가격’의 도메인은 자연수이기 때문에 ‘10.25’와 같은 값이 올 수 없다.
- key constraints : 서로 다른 tuples은 같은 value의 key를 가질 수 없다.
- 즉 주문정보 테이블에서 ‘주문번호’가 같을 수 없다.
- NULL value constraint : attribute가 NOT NULL로 명시되어 있다면 NULL을 가질 수 없다.
- Entity integriry contraint : PK는 value에 NULL을 가질 수 없다.
- NULL이 가능하다면 투플을 식별할 수가 없게 되기 때문이다.
- Referential integrity contraint : FK와 PK와 도메인이 같아야 하고 PK에 없는 values를 FK가 값으로 가질 수 없다.
- 즉, ‘주문정보’ 테이블의 ‘고객코드’는 ‘고객’ 테이블의 ‘고객코드’와 도메인이 같아야하고 ‘고객’ 테이블에 있는 ‘고객코드‘값만을 참조할 수 있다.
728x90
'Computer Science > Database' 카테고리의 다른 글
데이터베이스 기초 3. SQL로 데이터베이스, 테이블 정의(MySQL) (0) | 2024.12.17 |
---|---|
데이터베이스 기초 1. 데이터베이스 관련 용어와 개념 (1) | 2024.12.11 |
SQLP 기초 - 4. 인덱스 기본 사용법 (2) | 2024.10.10 |
SQLP 기초 - 3. 인덱스 구조 및 탐색 (1) | 2024.10.09 |
SQLP 기초 - 2. 데이터 저장 구조 및 I/O 매커니즘 (1) | 2024.10.08 |