본문 바로가기
데이터 베이스

기본) 스키마 (Schema) 설계

by 왕밤 2021. 10. 12.

 

 

 

 데이터베이스 스키마(database schema)

 

 

📚  스키마의 사전적 정의

: 개요

 

💻   컴퓨터 과학에서의 스키마

:  데이터베이스에서 자료의 구조, 자료의 표현 방법, 자료 간의 관계를 형식 언어로 정의한 구조

 

 

즉 데이터베이스에서의 스키마는  DB내에 어떤 구조로 데이터에 저장되는가를 나타내는 구조이다

 

 

더 자세히 설명하자면

스키마(Schema)는 데이터 베이스에서 데이터가 구성되는 방식과 서로 다른 엔티티(entities)간의 관계를 설명한다

 

 

🙌   여기서 엔티티란?

객체와 배열처럼 데이터들의 집합의 한 단위를 엔티티라고 한다

데이터베이스에서 엔티티는 테이블로 표시할 수 있다.

 

 

스키마 설계

  • 1 : N 관계
  • N : N 관계
  • 1 : 1 관계

 

①  1 : N  (one-to-many "일대 다") 의  관계

하나의 레코드가 서로 다른 여러 개의 레코드와 연결된 경우를 말함

 

학교 수강신청을 위한 데이터베이스를 구축한다고 했을 때의 예를 가지고 설명하자

 

이 관계(구조)에서는 한 명의 교사가 여러 강의를 할 수 있다

그러나 여러 명의 교사가 하나의 강의만을 할 수는 없다

이를  1 : N (one-to-many "일대 다")의 관계라고 한다.

데이터 베이스 스키마의 기본 용어

 

 

그럼 Teachers와 Classes의 관계를 표현하는 방법은 뭐가 있을까?

 

 

① 외래 키 사용하기

 

다른 테이블에서 테이블의 기본 키(Primery Key)를 참조할 때 해당 값을 외래 키(Forein Key)라고 한다

ClassID 필드는 Classese테이블에서 특정 레코드를 고유하게 식별하는 외래키이다

 특정 필드외에는 ID 필드가 포함된다

 외래 키 사용하기 의 문제점

  • 열(Column)의 크기는 고정 => 만약 교사 및 교수가 수업 수가 늘어난다면 ID를 담을 공간이 부족한 가능성이 있다.
  • 검색 시간이 매우 오래걸린다.

🤔  검색시간이 오래걸리는 이유

 

한 열에 위의 예시처럼 여러 값을 저장하면

cs 를 담당하는 A 교수의 수업 중 a라는 학생이 있는 지를 확인하기 위해

1,2,3의 클라스 아이디를 가지고 있는 값을 반복해서 확인해야 한다

 

 

 

② Teachers 테이블을 Classes테이블에 저장하기

Teachers의 데이터가 바뀌어도 Classes에 영향이 가지 않고

검색속도도 보다 빠르다

 

 

일대 다의 관계를 표현할 때는 의 데이터에의 데이터를 저장하는 방식을 택해야 한다

 

②  N : N (Many to Many "다대다 ") 의  관계

여러 개의 레코드가 다른 테이블의 여러 개의 레코드와 관계가 있는 경우

N : N관계를 위해 스키마를 디자인 할 때는 Join 테이블을 만들어 관리한다

1 : N 의 관계와 다르게 양방향으로 다수의 레코드를 가질 수 있다

 

 

여러 개의 강의가 있고 여러 명의 학생이 있다. 학생은 여러 개의 강의를 들을 수 있고, 한 강의는 여러 명의 학생이 수강신청을 해 강의를 들을 수 있다

 

이런 관점을 통해 classes와 students의 관계는  N:N(Many to Many "다대다 ") 관계가 된다

 

classes와 students의 관계

 

제일 좋아하는 강의를 선택하는 데이터를 만들 경우

Classes와 Students테이블들이 각각 참조하는 외래키를 공통으로 묶어 테이블을 만들어 참조하는 방법을 사용한다

이는 조인 테이블이라고 하며 일대다의의 관계를 2번 사용한 형태이다

 

이 테이블을 통해 어떤 학생이 몇 개의 강의를 듣는지 또는, 어떤 강의가 몇 명의 학생들이 듣는지 등을 확인할 수 있다

이렇게 조인 테이블을 생성하더라도, 조인 테이블을 위한 기본키(여기서는 제일좋아하는 강의 id)는 반드시 있어야 합니다

 

③ 1 : 1 관계

출처 : 코드스테이츠

User 테이블은 user_id, name, phone_id를 가지고 있고

이 중 phone_id는 외래키(foreign key)로써, Phonebook 테이블의 phone_id와 연결되어 있다

Phonebook 테이블은 phone_id와 phone_number를 가지고 있다

 

각 전화번호가 단 한 명의 유저와 연결되어 있고, 그 반대도 동일하다면,

User 테이블과 Phonebook 테이블은 1:1 관계(One-to-one relationship)다

 

그러나 1:1 관계는 자주 사용하지 않습니다.

1:1로 나타낼 수 있는 관계라면 그냥 User 테이블에 phone_id를 대신해 phone_number를 직접 저장하는 게 나을 수 있다

 

 

읽어봐야할 블로그

https://siyoon210.tistory.com/26

'데이터 베이스' 카테고리의 다른 글

SQL 이란? (Structured Query Language)  (0) 2021.10.13
(관계형)데이터베이스란?  (0) 2021.10.13

댓글