1. 데이터베이스와 데이터베이스의 필요성

 

  데이터를 영속적이고 효율적으로 관리하기 위해 데이터베이스가 필요하다.

  영속적이다 -> 영구 보존이 가능하다.

  효율적 -> 중복되는 데이터가 없고 유지, 보수 및 보안적인 이슈를 모두 포함한다.

 

 

 

2. 관계형 데이터베이스와 용어 정리

 

  데이터베이스에 존재하는 테이블이 서로 관계를 맺을 수 있다는 의미이다.

  관계형 데이터베이스는 테이블끼리 관계를 맺을 수 있어서 관계형 DB라는 이름이 붙었다.

  관계는 크게 세 가지 형태가 있는데 자세한 내용은 아래에서 알아보도록 하고 우선 기본적인 용어부터 알아보자.

 

  • 데이터 : 각 항목에 저장되는 값이다.
  • 테이블 : 사전에 정의된 행과 열로 구성되어 있는 체계화된 데이터이다.
  • 필드 : 테이블의 열을 가리킨다.
  • 레코드 : 테이블의 한 행에 저장된 정보다.
  • 기본 키(Primary Key) : 하나의 테이블에서 각 레코드를 고유하게 식별할 수 있는 필드를 기본키로 지정할 수 있다. 하나의 테이블엔 하나의 기본키만 존재해야 한다. 
  • 외래 키(Foreign Key) : 외래 키는 두 테이블을 연결하기 위해 사용되는 키이다. 외래 키는 다른 테이블의 기본키를 참조하는 한 테이블의 필드이다.

 

 

3. 관계형 데이터베이스의 관계

 

  관계형 데이터베이스의 관계는 크게 세 가지가 있다.

 

  • 1 : 1 관계 (일대일 관계)
  • 1 : N 관계 (일대다 관계)
  • N : N 관계 (다대다 관계)

  3 - 1) 일대일 관계

 

    1 : 1 관계란 어느 엔티티 쪽에서 상대 엔티티를 보더라도 반드시 단 하나씩 관계를 가지는 것을 말한다.

    예를 들면, 우리나라에서 결혼제도는 일부일처제이다.

    즉, 한 남자는 한 여자와, 한 여자는 한 남자와 밖에 결혼을 할 수 없다.

    법적으로 남편을 또는 부인을 2명 이상 둘 수 없다.

    이러한 관계를 1:1 관계라고 한다.

 

  3 - 2) 일대다 관계

 

    1 : N 관계는 한 쪽 엔티티가 관계를 맺은 엔티티 쪽의 여러 객체를 가질 수 있는 것을 의미한다.

    이 관계는 매우 흔한 방식이며, 실제 DB를 설계할 때 자주 쓰이는 방식이다.

 

    예를 들면, 부모와 자식 관계가 있다.

    부모는 자식을 여러명 가질 수 있다.

    DB에서는 이를 부모가 자식을 소유한다고 ( has a 관계 ) 표현한다.

    반대로 자식 입장에서는 부모( 어머니, 아버지의 쌍 )를 하나만 가질 수밖에 없다.

 

    이러한 관계를 1 : N 관계라고 하며, 계층적인 구조로 이해할 수도 있다.

 

  3 - 3) 다대다 관계

 

    N : N 관계는 관계를 가진 양쪽 엔티티 모두에서 1 : N 관계가 존재할 때 나타나는 모습이다.

    즉, 서로가 서로를 1:N 관계로 보고 있는 것이다.

 

    예를 들면, 쇼핑몰에서 유저와 상품이 이런 관계를 맺을 수 있다.

    한 회원은 쇼핑몰의 여러 상품들을 가질 수 있다.

    청바지, 모자, 티셔츠, 남방 등...

 

    반대로 하나의 티셔츠도 여러 회원들을 가질 수 있다.

    하나의 티셔츠를 나도 친구도 부모님도 가질 수 있다.

 

    이처럼 관계를 맺은 두 엔티티가 서로 많이 가질 수 있을 때, 이를 N : N 관계라고 한다.

 

 

 

4. 기본키와 외래키를 활용한 테이블 관계 설정

 

  테이블엔 각 엔티티를 식별할 수 있는 기본 키가 존재한다.

  기본 키는 중복되지 않는 값이다. 

 

  예를 들어, 주민 번호는 대한민국 국민들을 식별할 수 있는 기본 키가 될 수 있다.

  주민등록증이 같은 사람은 있을 수 없기 때문에, 기본 키로서 기능을 할 수 있는 것이다.

 

  이처럼 테이블 간의 관계를 맺을 때, 흔히 기본 키를 이용하여 관계를 맺는다.

  예를 들어, 1 : N 관계의 대표적인 예로 게시글과 댓글을 생각해보자.

  게시글은 여러 댓글들을 가질 수 있으며, 특정 댓글은 어떤 한 게시글에만 속해 있다.

  따라서 게시글과 댓글은 1:N 관계라 할 수 있다.

 

  그렇다면 게시글은 자신이 어떤 댓글들을 가지고 있는지 어떻게 알 수 있을까요?

  댓글 테이블의 스키마를 설계할 때 칼럼에는 아래와 같은 정보들이 있을 수 있다.

 

  • 댓글 아이디 ( PK )
  • 작성자 명
  • 내용
  • 작성일

 

  여기서 어떤 게시글에 속해 있는지에 대한 정보가 필요하므로 하나의 칼럼이 더 필요한데, 이를 외래 키라 한다.

 

  • 게시글 아이디 ( FK )

  여기서 게시글 아이디는 게시글 테이블의 기본 키이며, 이를 댓글 테이블의 외래 키로 지정하여 관계를 맺을 수 있다.

 

  즉, 게시글은 어떤 댓글들이 자신의 댓글들인지 알 필요 없고, 댓글만 자신이 어떤 게시글에 속하는지만 알면 1:N 관계를 성립할 수 있다.

  그 역할이 외래 키인 것이다.

 

  그렇다면 N : N 관계에서는 어떨까?

  여기서는 서로가 서로를 1 : N 관계로 갖고 있기 때문에, 서로의 기본 키가 자신의 외래 키 칼럼으로 갖고 있으면 된다.

  일반적으로 N : N 관계는 두 테이블의 대표 키를 칼럼으로 갖는 또 다른 테이블을 생성해서 관리한다.

  그리고 이런 테이블을 조인 테이블이라 부른다. 즉 두 테이블의 연결을 위해 중간다리 역할을 하는 테이블이 하나 더 있는 것이다.

 

 

+ Recent posts