본문 바로가기

Database/MySQL

[데이터베이스(강의)] 2. 관계형 데이터베이스 (relational database)

 

[ relational data model ]

 

 

* set

 - 서로 다른 elements를 가지는 collection. (중복x)

 - 하나의 set에서 elements의 순서는 중요하지 않음.

     e.g.) {1, 2, 11, 4, 7}

 


* relation in mathematics

Youtube (쉬운코드) 데이터베이스 강의

 

Cartesian product A X B = { (a, b) | a ∈ A and b B } _ 가능한 모든 pair의 조합

 

 

Youtube (쉬운코드) 데이터베이스 강의

 

binary relation ⊆ A X B  _ Cartesian product 의 부분집합(세 개의 pair)

 

 

Youtube (쉬운코드) 데이터베이스 강의

 

n-ary relation ⊆ X1 x X2 x ... x Xn

 

각각의 연결된 리스트 => 튜플(n-tuple)

 

< 수학에서의 relation > 

 - subset of Cartesian product ( Cartesian product 의 부분집합)

 - set of tuples (튜플들의 집합)

 


 

* relational data model

 

set => 도메인 (값들의 집합)

 


* student relation 예시 *

 

domain 정의

- students_ids : 학번 집합, 7자리 integer 정수

- human_names : 사람 이름 집합, 문자열

- university_grades : 대학교 학년 집합, {1, 2, 3, 4}

- major_names : 대학교에서 배우는 전공 이름 집합

- phone_numbers : 핸드폰 번호 집합

- phone_numbers : 핸드폰 번호 집합 (비상연락망)

 

=> 동일한 도메인에 대해서 사용목적(역할)이 다른 경우 => attribute로 표현.

 

- students_ids : id

- human_names : name

- university_grades : grade

- major_names : major

- phone_numbers : phone_num

- phone_numbers : emer_phone_num

 

각각의 튜플들을 효과적으로 표현하기 위해 relational table 사용

 

Youtube (쉬운코드) 데이터베이스 강의

 

 

* domain : set of atomic values

* domain name : 도메인 이름

* attribute (속성, ) : domain이 relation에서 맡은 역할 이름

* tuple (행) : 각 attribute의 값으로 이루어진 리스트, 일부 값은 NULL일 수 있다.

* relation : set of tuples

* relation name : relation의 이름

 


 

* relation schema

- relation의 구조를 나타냄.

- relation 이름과 attributes 리스트로 표기.

  e.g.) STUDENT(id, name, grade, major, phone_num, emer_phone_num)

- attributes와 관련된 constraints도 포함.

 

 

* degree of a relation

- relation schema에서 attributes의 수

 e.g.) STUDENT(id, name, grade, major, phone_num, emer_phone_num)  => degree 6

 

 

* relation (or relation state)

- set of tuples  튜플들의 집합. (임의의 시점에서의 튜플들의 집합_실제 데이터)

 

 

* relational database

- relational data model에 기반하여 구조화된 database.

- relational database는 여러 개의 relations로 구성된다.

 

 

* relational database schema

relation schemas set + integrity constraints set

 


[ relation의 특징 ] 

 

- relation은 중복된 tuple을 가질 수 없다. (relarion is set of tuples)

Youtube (쉬운코드) 데이터베이스 강의

 

 

- relation의  tuple을 식별하기 위해 attribute의 부분 집합을 key로 설정한다.

Youtube (쉬운코드) 데이터베이스 강의

 

 

- relation에서 tuple의 순서는 중요하지 않다. (정렬기준이 다양)

 

- 하나의 relation에서 attribute의 이름은 중복되면 안된다.

 

- 하나의 tuple에서 attribute의 순서는 중요하지 않다.

 

- attribute는 atomic 해야 한다. (composite or multivalued attribute 허용 안됨)

Youtube (쉬운코드) 데이터베이스 강의

 

  => address인 '서울특별시 강남구 청담동'이 atomic 하지 않음 (composite attribute)

        '서울특별시'  /  '강남구'  /  '청담동'  으로 쪼갤 수 있음.

 

  => major는 '컴공, 디자인' 은 두개의 값을 가지고 있음 (multivalued attribute)

         '컴공'  /  '디자인'  으로 쪼갤 수 있음.

 

 


 

* Null의 의미 

 

- 값이 존재하지 않는다.

- 값이 존재하나 아직 그 값이 무엇인지 알지 못한다.

- 해당 사항과 관련이 없다.

 

Youtube (쉬운코드) 데이터베이스 강의

 

=> 졸업하기 위해 토익점수 제출이 필요한 상황이라면,

    - 시험을 안봐서 토익점수가 없는 경우

    - 시험을 봤지만 제출하지 않은 경우

    - 제출했지만 누락되었거나, 정보가 업데이트 되지 않은 경우 

  등등 다양한 의미로 해석가능.

 


 

* super key (슈퍼키)

- relation에서 tuples를 unique하게 식별할 수 있는 attribute set.

 

 e.g.) PLAYER (id, name, team_id, back_number, birth_date) 

  super key => {id, name, team_id, back_number, birth_date} , {id, name}, {name, team_id, back_number}, .... etc

 

 

* candidate key (후보키)

- 어느 한 attribute라도 제거하면 unique하게 tuples를 식별할 수 없는 super key.

- key or minimal superkey

 

 e.g.) PLAYER (id, name, team_id, back_number, birth_date) 

  candidate key => {id}, {team_id, back_number}

 

 

* primary key (기본키)

- relation에서 tuple를 unique하게 식별하기 위해 선택된 candidate key.

 

 e.g.) PLAYER (id, name, team_id, back_number, birth_date) 

  primary key => {id}, {team_id, back_number}

                             보통 attribute 수가 적은 것으로 선택

 

 

* unique key

- primary key가 아닌 candidate keys

- alternate key

 

 e.g.) PLAYER (id, name, team_id, back_number, birth_date) 

  unique key =>{team_id, back_number}

 

 

* foreign key (외래키)

- 다른 relation의 PK를 참조하는 attributes set.

 

 e.g.) PLAYER (id, name, team_id, back_number, birth_date) 와 TEAM (id, name, manager)가 있을 때

  foreign key => PLAYER {team_id}

 


 

* constraints 뜻

- relational database의 relations들이 언제나 항상 지켜줘야 하는 제약 사항.

 


 

* implicit constraints

 - relational data model 자체가 가지는 constraints.

 - relation은 중복되는 tuple을 가질 수 없다.

 - relation 내에서는 같은 이름의 attribute를 가질 수 없다.

 


 

* schema-based constraints

 - 주로 DDL을 통해 schema에 직접 명시할 수 있는 constraints.

 - explicit constraints.

 

 

1) domain constraints

- attribute의 value는 해당 attribute의 domain에 속한 value여야 한다.

Youtube (쉬운코드) 데이터베이스 강의

 

=> grade는 1, 2, 3, 4 학년 중 하나여야 한다.

 

 

 

2) key constraints

- 서로 다른 tuples는 같은 value의 key를 가질 수 없다.

Youtube (쉬운코드) 데이터베이스 강의

 

 

 

3) NULL value constraint

- attribute가 NOT NULL로 명시됐다면 NULL을 값으로 가질 수 없다.

Youtube (쉬운코드) 데이터베이스 강의

 

 

 

4) entity integrity constraint

- primary key는 value에 NULL을 가질 수 없다.

Youtube (쉬운코드) 데이터베이스 강의

 

 

4) referential integrity constraint

- FK와 PK와 도메인이 같아야 하고, PK에 없는 values를 FK가 값으로 가질 수 없다.

Youtube (쉬운코드) 데이터베이스 강의

 

 


 

https://www.youtube.com/watch?v=gjcbqZjlXjM&list=PLcXyemr8ZeoREWGhhZi5FZs6cvymjIBVe&index=2