본문 바로가기
CS/DataBase

데이터베이스 첫걸음 정리 - 34장. 데이터베이스 설계

by yongckim 2022. 10. 4.
728x90
반응형

데이터베이스를 설계한다는 것은 데이터베이스의 스키마 내에 테이블, 인덱스, 뷰 등의 데이터베이스 객체를 정의하는 것을 말합니다.

스키마 내에 정의한다는 뜻에서 “스키마 정의”라고 부르기도 합니다.

데이터베이스 설계의 주된 내용은 테이블의 이름이나 열, 자료형을 결정하는 것입니다.

“이 테이블은 이 열을 이용해 저쪽 테이블과 연결한다”와 같이 테이블 간의 관계를 생각하면서 여러 테이블을 정의하고 작성하게 됩니다.

논리명과 물리명

테이블을 설계할 때는 테이블 정의서나 설계도 등의 문서를 작성하는 경우가 많은데 일반적으로 다음과 같은 양식을 많이 사용합니다.

테이블을 설계할 때는 테이블 이름이나 열 이름을 지정하게 되는데, 하나의 테이블에 대해 물리명과 논리명이라는 두 개의 이름을 지정할 때 도 있습니다.

물리명데이터베이스에서 사용될 이름으로, CREATE TABLE에 지정하는 이름이 이에 해당됩니다.

논리명테이블의 설계상에서 사용되는 이름을 의미합니다.

 

물리명데이터베이스 시스템 규칙에 따라 길이에 제한이 있거나 공백문자를 사용할 수 없는 등의 제약이 따릅니다.

따라서 일상에서 사용하는 단어로는 이름을 지정하는데 문제가 있을 수 있습니다.

또한 전통적으로 알파벳을 사용해 이름을 지정합니다. 예를 들어, 물리명을 “product”라고 하는 경우 논리명은 상품으로 지정하는 방식입니다.

이런 제약 때문에 물리명으로 의미가 잘 전달되지 않는 경우가 발생할 수 있어 이런 경우 논리명으로 작성하게 됩니다.

다음은 물리명과 논리명을 함께 사용하는 테이블 설계도 입니다.

자료형

테이블에 열에는 필수적으로 자료형을 지정해야 합니다.

이때, 지정하는 자료형은 저장할 데이터에 맞는 자료형을 지정해야 합니다.

예를 들어, 수치 데이터만 저장하는 열에는 수치형으로 지정해야 합니다. 또는 제조번호처럼 알파벳도 포함되는 데이터의 경우 문자열형으로 지정하는 편이 낫습니다.

 

데이터에 따라서는 “1, 2, 3 중 하나”, “yes, no 중 하나”와 같이 특정 값만 취급하는 경우가 있습니다.

이런 경우에는 데이터베이스 기능으로 제약(CHECK 제약)을 걸 수 있으므로 데이터 정합성이 중요한 부분에는 적극적으로 사용할 필요가 있습니다.

 

CHECK 제약이란? 열에 들어갈 수 있는 값을 제한하는 명령으로 입력되는 값이 CHECK 조건과 맞지 않으면 에러가 발생합니다.
다음은 사용예시입니다.
CREATE TABLE sample ( birthYear INT CHECK(birthYear ≥ 1900 AND birthYear ≤ 2022) )

일반적으로, 데이터베이스 시스템에서 데이터 정합성을 체크할 수 있다면 데이터베이스에 맡겨버리는 편이 가장 확실하고 편리합니다.

이런 기능을 활용하는 대신 애플리케이션에서 따로 구현해 사용할 수도 있지만, 이런 경우 정합성이 맞지 않을 수 있으며 개발 비용도 상승해 문제가 발생할 수 있습니다.

만약, 특정 데이터만 들어가는 열을 만들경우 설계시 비고란에 특정 데이터만 들어가는 열임을 표시하는 경우가 많습니다.

고정길이와 가변길이

문자열형의 경우 고정길이와 가변길이가 존재하며, 어느 방식으로 지정할 지는 저장할 데이터에 따라 달라집니다.

예를 들어, 상품코드와 같은 자리수가 이미 정해진 데이터의 경우 고정길이 문자열로 지정하는 편이 좋고, 상품 설명과 같이 입력되는 문자열의 길이의 변동폭이 큰 경우 가변길이 문자열로 지정하는 것이 좋습니다.

고정길이로 저장하거나 가변길이로 저장하거나 성능차이는 거의 없습니다. 고정길이를 사용하는 경우는 특정 길이로 제한하고 싶을때가 적절한 사용시기라고 생각됩니다.

 

VARCHAR 형의 경우 65535 바이트 이하만 저장할 수 있는데 이보다 큰 대용량의 데이터를 저장하고 싶은 경우 LOB(Large Object) 형을 사용할 수 있습니다.

LOB형은 큰 데이터를 다루는 자료형이지만 인덱스를 지정할 수 없다는 제약이 있습니다.

기본키

테이블을 작성할 때 기본키 제약을 거는 경우에는 주의를 기울여야 합니다.

테이블의 행에 유일성을 지정한다는 것은 대단히 중요한 일입니다.

하지만 기본키로 지정할 열이 적절하지 않은 경우도 있을 것입니다. 이러한 경우 자동으로 증가하는 열을 사용해서 이를 기본키로 만들면 간단하게 해결할 수 있습니다.

자동증가 열은 INSERT할 경우 번호를 자동으로 증가시켜 저장해주는 편리한 열입니다.

MySQL의 경우는 열을 지정할 때 AUTO_INCREMENT를 지정하는 것으로 자동증가 열이 됩니다.

AUTO_INCREMENT로 지정한 열은 PRIMARY KEY또는 UNIQUE로 유일성을 지정합시다.

 

ER 다이어그램

테이블 설계할 때 테이블 간의 관계를 명확히 하기 위해 설계도를 작성하는 경우가 있습니다.

이때 대표적으로 ER 다이어그램이 사용됩니다.

ER 다이어그램은 관계를 나타내야할 경우 사용되며, 관계형 데이터베이스에만 사용되는 것은 아닙니다.

 

ER 다이어그램은 Entity(개체) 간의 Relationship(관계)를 나타낸 것으로 여기서 엔티티는 테이블, 뷰를 의미합니다.

ER 다이어그램에서 개체는 사각형으로 표기하며 사각형 상단에는 이름을 적고 사각형 안에는 객체의 속성(열)을 표기합니다.

이때, 기본키가 되는 열부터 차례로 기술하며, 열 이름은 주로 논리명으로 표기합니다.

만약 개체와 개체간의 관계가 있을 경우 다음과 같이 선으로 이어서 표현합니다.

이때 관계에 따라 몇 대 몇의 관계를 가지는지 숫자나 기호로 나타낼 수 있습니다. (이를 카디널리티 또는 다중도라고 합니다.)

대표적으로 다음 3가지의 표기 방법이 있습니다.

  • 일대일(1:1)
  • 일대다(1:N)
  • 다대다(N:M)

ER 다이어그램의 연계는 데이터베이스에서 외부참조제약(외부키 제약)으로 지정되는 경우가 있으므로 중요합니다.

외부키 제약을 설정하면 데이터의 정합성이 엄격하게 관리되고 성능이 떨어진다는 문제가 있기 때문에 채용하지 않을 수 있습니다

정리

  • 데이터베이스 설계란 데이터베이스의 스키마 내에 테이블, 인덱스, 뷰 등의 데이터베이스 객체를 정의하는 것을 의미합니다.
  • 데이터 베이스 설계시, 하나의 테이블에 대해 의미전달을 위해 물리명과 논리명이라는 두 개의 이름을 지정할 때 도 있습니다.
  • 데이터 베이스 설계시, 상황에 따라 적합한 자료형을 선택하며 특정 데이터만 허용하고 싶은 경우 CHECK와 같은 제약을 적용하는 것이 좋습니다.
  • 문자열형의 경우 고정길이와 가변길이로 지정할 수 있으며, 큰 데이터를 저장할 때는 LOB 자료형을 사용할 수 있습니다.
  • 데이터베이스 설계시, 기본키를 지정하는 것은 매우 중요하며 기본키를 지정할 열이 적당하지 않은 경우 자동으로 숫자가 증가하는 열을 추가시켜 기본키로 사용할 수 있습니다.
  • 테이블 간의 관계를 그림으로 표현하기 위해 ER 다이어그램으로 작성할 수 있으며 관계에 따라 일대일, 일대다, 다대다 등으로 표현할 수 있습니다.
반응형