오래 못 할 짓 하지 않기

[ 데이터베이스 ] 2. Relational Database 본문

3학년 1학기/데이터베이스(DB)

[ 데이터베이스 ] 2. Relational Database

쫑알bot 2023. 12. 26. 16:48
728x90

Relation을 알기 위해 알아야 하는 개념

 

● Set

: 서로 다른 elements를 가지는 집합 

  순서는 중요X

 

 

Relation의 형태는 이와 같다.

 

위와 같은 List를 [ Tuple = n개의 element로 이루어진 list ] 이라고 부를 수 있다.

 


 

Relational data model

 

여기에서는 Set =  Domain

 

ex) 학생 정보로 relation을 만들어보자

● student_ids                  : 학번 집합 

● student_names            : 학생 이름 집합

● university_grades        : 학년 집합

● major_name                : 전공 집합 

● phone_nums               : 핸트폰 번호 집합

 

이렇게 만들었다.

 

근데 이 학생의 비상연락망도 추가하려고 하니 

동일한 Domain이 같은 Relation 안에서 두 번 사용되지만, 목적과 역할이 다르다.

이를 표시하기 위해 Attribute를 표시한다.

 

Attribute는 Domain들이 그 Relation에서 어떤 역할을 하는지 나타낸다.

 

표시를 한다면 다음과 같다.

 

이 안에 값들이 들어갈 것이고, 그 값들마다 데이터로 사용되는 Tuple들이 있을 것이다.

 

 

이러한 관계를 가장 잘 표현하기 좋은 것은 Table이다.

 

 

 

짚고 가야하는 개념들

 

Domain  : Set of atomic values  = 더 이상 나눠지지 않는 값의 집합

Attribute : Domain이 Relation에서 맡은 역할

Tuple :      각 attribute의 값으로 이루어진 리스트 / 일부 값은 NULL일 수 있다.

 


 

Relation Schema

 

- Relation 이름 + Attributes 리스트로 표기

ex) STUDENT ( id, name,grade,major )

 

- Attribute와 관련된 Contraints도 포함

 

Degree of a relation : relation schema에서 attributes의 수

ex) STUDENT ( id, name,grade,major ) → Degree : 4

 

 

Relational Database Schema

 

relation scemas set + integrity constraints set

 


 

Relation 의 특징

1) 중복된 Tuple은 가질 수 없다.

 

 

2) Tuple을 식별하기 위해 Unique한 값을 attribute의 key로 설정한다.

 

 

 

3) Tuple의 순서는 별 의미없다. / 하나의 Tuple에서 attribute의 순서는 중요하지 않다.

4) 하나의 Relation에서 Attribute의 이름은 중복되면 안된다.

 

 

5) Attribute는 atomic해야한다. = 더 이상 나눠지지 않는 걸 타겟으로 만들어야 한다.

   = 하나의 attribute가 여러 값을 가지면 안 된다. (Composite or Multivalued X )

 

 

 


NULL

의미 : 값이 업데이트 되지 않았거나

          값을 입력하지 않았거나

 


KEY

 

●  Superkey

 

: Relation에서 Tuple을 Unique하게 식별할 수 있는 Attributes set

→ Select 쿼리를 했을 때 한 놈만 나오게 하는 Attributes set

 

STUDENT(id,name,class,phone_num,birth_date,team)에서

Relation에서는 중복되는 tuple을 허용하지 않기 떄문에

 

전체 Attribute set항상 Superkey가 될 수 있다.

 

또 위와 같은 Relation에서는 { id, name } 이 superkey가 될 수 있고

{name , class, birth_date} ...등등 될 수 있는 set은 아주 많다.

 


 

●  Candidate key

 

: 어느 한 attribute라도 제거하면 Unique하게 식별할 수 없는 Super key

→ Select 쿼리에서 하나의 Attribute만 없애면 여러 놈이 나오는 것  

 

ex) PLAYER ( id, name, team_id, back_num,birth_date)에서의 candidate key는

{id}, {team_id,back_num} 

→ 두 번째 set을 보면,

     team_id만 있을 경우 : 같은 팀으로 검색하면 나오는 애들이 엄청나게 많을 것

     back_num만 있을 경우 : 다른 팀끼리는 등번호가 같은 경우가 많다. 

            ex) back_num = 7 인 걸 찾으려면 , 한국 7번, 일본 7번 , 브라질 7번 다 나옴

                  한 놈만 나오게 하려면 팀 id를 함께 넣어야 함

 


●  Primary key

 

: Relation에서 Tuple을 Unique하게 식별하기 위해 선택된 Candidate key

 

ex) PLAYER ( id, name, team_id, back_num,birth_date)에서의 primary key는

{id}, {team_id,back_num} 

 

Tip : Attribute가 가장 적은 set으로 하는 게 좋음

       그래서 웬만하면 Id로 하는 거임

 

●  Unique key

 

: Primary key가 아닌 candidate keys

 

= Altenate key

 

ex) PLAYER ( id, name, team_id, back_num,birth_date)에서의 Unique key는

{team_id,back_num} 

 


●  Foreign key

 

: 다른 Relation의 Primary Key를 참조하는 Attributes set

위 경우에는 [ PLAYER relation에 있는 team_id ] 가 [ TEAM relation에 있는 id ]를 참조할 수 있다. 

따라서, team_id로 접근하여 TEAM relation에 있는 정보를 참조할 수 있음.  

 


 

Constraints

 

Relational DB의 Relation들이 지켜줘야 하는 제약 사항 

 

 

●  Implicit Constrains

: Relational data model 자체가 가지는 Constrains

 

ex) 

★ Relation은 중복되는 tuple을 가질 수 없다.

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

 


●  Schema-based Constrains

주로 DDL을 통해 shema에 직접 명시할 수 있는 Constrains

     ● Explicit constraints

 

  1. Domian Constraints
    : Attribute의 value는 해당 attribute의 domain 에 속한 value여야 한다.

 

 

     2. Key Constraints

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

 

 

 

      3. NULL value Constraints

           : Attribute 가 NOT NULL로 명시되었다면 NULL값을 가질 수 없음

 

 

      4. Entitiy integrity constraint

         : Primary key는 value에 NULL을 가질 수 없다.

 

 

      5. Referential integrity Constraints

         : Foreign key와 Primary key와 도메인이 같아야하고

           Primary key에 없는 Values를 Foreign key가 Value로 가질 수 없다.

 

 

(참고)

 

유튜브 쉬운코드