관계형 데이터베이스(relational database)개념

Organ·2023년 10월 19일

데이터베이스

목록 보기
2/5

relational data model

relational data model을 이해하려면 일단 set을 알아야 하는데 set은 서로 다른 요소를 가지는 컬렉션이다. 즉 중복된 요소를 가지지 않는다는 것이고, 하나의 set에서 elements의 순서는 중요하지 않다. relational data model에서 set은 도메인을 의미하고 각각의 도메인에도 이름을 붙일 수 있다.

student(대학에서의 학생 정보)를 relational data model을 이용해서 어떻게 relation으로 표현을 하는지 예를 통해 살펴보겠다.

  • 관련된 도메인 정의하기
    • students_ids : 학번 집합, 7자리 integer 정수
    • human_names : 사람 이름 집합, 문자열
    • university_grades : 대학교 학년 집합, {1, 2, 3, 4}
    • major_names : 대학교에서 배우는 전공 이름 집합
    • phone_numbers : 핸드폰 번호 집합
      phone_numbers가 두개인 이유는 학생의 비상연락망도 가지기 위함이다. 그렇다면 phone_numbers는 학생의 전화번호를 저장하기 위해서도 사용되고, 학생의 비상연락망도 저장하기 위해서 사용된다. 그러면 동일한 도메인이 같은 relation에서 두 번 사용이 되는 것이고 다만 그 사용되는 목적이 다른 것이다. 그러면 그 역할을 표시해주기 위해서 relatinoal data model에서는 추가적으로 attribute라는 개념이 등장한다. 그래서 각각의 도메인들이 이 relation에서 어떤 역할을 하는지 수행하는 역할의 이름을 붙여주는 것. domain 밑에 있는 것들이 각각의 attribute이다.

주요 개념 정리

  • domain
    값들의 집합. 그런데 여기서 중요한 것은 그 값들이 atomic한 값, 즉 더 이상 나누어 질 수 없는 값들로 이루어져야 된다라는 제약 사항이 있다. domain에 이름을 붙여줄 수 있는데 그것을 domain name이라고 한다.
  • attribute
    domain이 relation에서 맡은 역할 이름을 attribute라고 한다.
  • tuple
    각 attribute의 값으로 이루어진 리스트이며 일부 값은 NULL일 수 있다.
  • relation
    set of tuple 그러니까 tuple들의 집합이다.
  • relation name
    relation의 이름이다.

relation schema

  • relation의 구조를 나타낸다.
  • relation 이름과 attributes 리스트로 표기된다.
  • e.g. STUDENT(id, name, grade, major, phone_num, emer_phone_num) 처럼 relation(attributes) 이렇게 relatino schema를 표현하는 방식이다. 따로 시각적으로 표시되진 않지만 attributes와 관련된 constraints도 포함한다.

degree of a relation

  • relation schema에서 attributes의 수를 degree of a relation이라고 한다. 예를 들어서 student와 관련된 relation schema가 이렇게 있을 때,
    STUDENT(id, name, grade, major, phone_num, emer_phone_num)
    이 때의 degree는 6이 되는 것

relational database

  • relatinoal data model에 기반하여 database를 구조화 하는 것
  • relational database는 여러 개의 relations으로 구성된다.

relation의 특징들

  • relation은 중복된 tuple을 가질 수 없다.
  • relation is set of tuples(튜플들의 set이기 때문)
  • relation의 tuple을 식별하기 위해서 attribute의 부분 집합을 key로 설정한다.
  • relation에서 tuple의 순서는 중요하지 않다.
  • 하나의 relation에서 attribute의 이름은 중복되면 안된다.
  • 하나의 tuple에서 attribute의 순서는 중요하지 않다
  • attribute는 atomic한 값을 가져야 한다.(더이상 나눌 수 없는 값)
    예) 서울특별시 강남구 청담동 -> 이렇게 여러개의 attribute가 하나의 attribute로 묶여져 있는 것을 composite attribute라고 하는데, 이런 것들을 나누어 줘야 한다. 또 정공이 컴공과 디자인 복수 전공이라면 이것을 multivalued attribute라고 하며 이 역시 나누어 줘야 한다.

NULL의 의미

  • 값이 존재하지 않는다.
  • 값이 존재하거나 아직 그 값이 무엇인지 알지 못한다.
  • 해당 사항과 관련이 없다.

key

  • superKey
    relation에서 tuples를 unique하게 식별할 수 있는 attributes set
    예를 들어 PLAYER이라는 relation에 아이디, 선수이름, 팀 아이디, 등번호, 생년월일 이런 정보를 담고 있다고 생각해보면 이 때 PLAYER relation에 담고 있는 superKey는 무엇이 될 수 있냐면 우선 relation자체가 중복되는 tuple을 허용하지 않기 때문에 전체의 attributes set을 가지면 그 자체로 superKey가 된다. 그 외에도 선수들의 아이디와 이름, 이름과 팀 아이디 그리고 등 번호까지 unique하게 tuples를 식별할 수 있다.
  • candidate key
    어느 한 attribute라도 제거하면 unique하게 tuples를 식별할 수 없는 super key이다. 편하게 key라고 부르기도 하고 minimal superkey라고 부르기도 한다. PLAYER 에서의 예는 아이디 혹은 팀아이디와 등번호 가 될 수 있다.
  • primary key
    relation에서 tuples를 unique하게 식별하기 위해 선택된 candidate key이다. 만약에 PLAYER에서 아이디를 가지고 이 tuples들을 식별하겠다고 선택하면 아이디가 primary key가 되는 것. 보통 primary key를 고를 때는 attribute수가 적은 것을 primary key로 고른다.
    primary key는 중복된 값을 가질 수 없으며, NULL도 가질 수 없다.
  • unique key
    primary key가 아닌 candidate key이다. alternate key라고 부르기도 한다.
  • foreign key
    다른 relation의 PK를 참조하는 attributes set
    예를 들어 PLAYER relation과 TEAM relation 이 있을 때 PLAYER의 팀 아이디는 TEAM relation에서의 아이디를 참조해오기 때문에 foreign key는 PLAYER의 팀 아이디이다.

constraints 뜻

relation database의 relations 들이 언제나 항상 지켜줘야 하는 제약 사항을 의미한다.

  • implicit constraints
    relational data model 자체가 가지는 constraints 예를 들면 relation은 중복되는 tuple을 가질 수 없고 relation 내에서는 같은 이름의 attribute를 가질 수 없다.
  • schema-based constraints
    주로 DDL을 통해 schema에 직접 명시할 수 있는 constraints 이고 다른 말로 explicit constraints라고도 한다.
    • domain constraints
      attribute의 value는 해당 attribute의 domain에 속한 value여야 한다.
    • key constraints
      서로 다른 tuples는 같은 value의 key를 가질 수 없다.
    • NULL value constraint
      attribute가 NOT NULL로 명시됐다면 NULL을 값으로 가질 수 없다.
    • entity integrity constraint
      primary key는 value에 NULL을 가질 수 없다.
    • referential integrity constraint
      foreign key(FK)와 primary key(PK)는 도메인이 같아야 하고 PK에 없는 values를 FK가 값으로 가질 수 없다.

0개의 댓글