Relational model
데이터들을 어떻게 조직, 생성, 조작하는가 또한 어떻게 규칙을 줄 것인가에 따라 사용하는 데이터베이스가 사용하는 모델이 달라집니다.
우리가 보통 알고 있고, 사용하는 데이터베이스는 Relational model입니다.
추가적으로 Relation model을 생성하기 전에 디자인 단계의 모델을 Entity-Relationship data model(E-R model)이라고 합니다.
C의 UML과 비슷한 개념이라고 생각하면 될 것 같습니다.
.
.
.
이제 Relational model의 특징을 알아보겠습니다.
데이터는 relation이라고 불리는 테이블에 저장할 수 있습니다.
tuple
하나의 튜플은 각 attribute를 나타내는 요소들의 집합을 말합니다. 집합이라고 해서 다른 튜플과 중복이 허용되는 것이 아닙니다. tuple은 순서가 있는 요소들의 집합입니다. (pair -> tiple -> n-tuple)
Attribute
위의 relation의 이름이 character라고 한다면 character relation의 scehma가 가지는 attribute는 다음과 같이 표현합니다.
character(이름, 나이, 성별)
domain
domain은 attribute에 기입될 수 있는 값들을 말합니다.
만약 attribute가 사람의 키 라고 했을 때 도메인은 [100, 200] 같은 연속적인 값일 수 있고
attribute가 사람의 성별이라고 했을 때 도메인은 남성, 여성 같은 불연속적인 값일 수 있습니다.
또한 도메인은 atomic(쪼개질 수 없는)이라는 특징을 가지고 있습니다.
예를 들어 attribute가 날짜이고 2022.03.28라는 도메인을 가지고 있을 때 이 도메인에서 년도 정보만 쓰고 싶다고 해서 2022라는 데이터만 따로 조회하여 사용할 수 없습니다.
key
key는 attribute의 부분집합입니다. 튜플들을 구분짓는 역할을 하고 있습니다.
보통 데이터베이스에서 key라고 하면 primary key 이고 이것은 튜플 각각을 구분할 수 있는 고유한 값을 말합니다.
예를 들어 중, 고등학교의 반 번호, 대학교의 학번 같이 학생 개개인이 가지고 있는 고유한 primary key 라고 할 수 있습니다.
하지만 primary key 뿐만 아니라 그 역할에 따라 여러 종류의 key가 존재합니다.
Super key
- 모든 도메인이 중복되지 않는 attribute를 super key라고 합니다.
위 그림에선 ID, name, dept_name, salary로 만든 모든 조합이 super key에 해당합니다. ex) (ID, name), (ID, salary)
Cadidate key
- 여러 key 중 가장 최소 단위로 나타낼 수 있는 super key를 candidate key라고 합니다. super가 cadidate를 포함합니다.
위 그림에선 모든 attribute 하나하나가 cadidate key 역할을 할 수 있습니다.
Primary key
- cadidate key 중 각 도메인들을 구분할 하나의 key만 지정한 것을 primary key라고 합니다.
위 그림에선 네개의 attribute중 하나만 primary key 지정할 수 있고, 보통 ID값으로 지정하여 사용합니다.
Foreign key
- 특정 relation의 cadidate key 중 다른 relation에서 primary key로 사용하는 cadidate key를 말합니다.
아래 그림에서 instructor relation의 dept_name가 department relation의 primary key로 사용되고 있습니다.
instructor은 department의 depth_name을 foreign key로 참조 하는 referencing relation이고,
department는 depth_name을 instroctor의 foreign key로 참조 당하는 referenced relation입니다.
'CS > DataBase' 카테고리의 다른 글
SQL(2) - Null value, Aggregate Function, Nested Sebqueries (0) | 2022.03.31 |
---|---|
SQL - join, rename, string, set (0) | 2022.03.31 |
Relational algebra (0) | 2022.03.31 |
데이터베이스 기본? (0) | 2022.03.28 |
데이터베이스만 할 수 있는 일 (0) | 2022.03.19 |