서론
지금부터 데이터베이스의 설계
에 관해 알아보겠다.
1. 데이터베이스 설계
데이터베이스를 설계한다는 것은 데이터베이스의 스키마 내에 테이블, 인덱스, 뷰 등의 데이터베이스 객체
를 정의하는 것을 말한다.
스키마 내에 정의한다는 뜻에서 '스키마 설계'
라 불리기도 한다.
데이터베이스 설계의 주된 내용은 테이블의 이름이나, 열, 자료형을 결정하는 것이다.
또한 '이 테이블은 이 열을 이용해 저쪽 테이블과 연결한다'와 같이 테이블 간의 관계를 생각하면서 여러 테이블을 정의하고 작성하게 된다.
단, 설계는 테이블 정의에만 그치지 않는다.
테이블을 설계할 때는 테이블 이름이나 열 이름을 지정하는데, 하나의 테이블에 대해 열 이름을 두 개
지정할 때도 있다.
하나는 데이터베이스에서 사용될 이름으로, 실제로 CREATE TABLE
에 지정하는 이름을 말하며 '물리명'
이라 부른다.
또 하나는 '논리명'
이라는 것으로 테이블의 '설계상 이름'
에 해당한다.
물리명은 데이터베이스 시스템 규칙에 따라 길이에 제한이 있거나 공백문자를 사용할 수 없는 등의 제약
이 따른다.
따라서 일상에서 사용하는 단어로는 이름을 지정하는데 한계가 있다.
또한 전통적으로 알파벳을 사용해 이름을 지정한다.
길이도 제한되다 보니 생략하거나 약자로 이름을 붙이는 경우도 많다.
그러다 보면 물리명만으로는 의미
가 전달되지 않는 경우도 많아 논리명이 필요해진다.
실제로 논리명을 위해 열을 따로 정의하는 것은 아니다.
테이블 정의서 같은 곳에 기재하여 열의 의미를 알아보기 편하게 하는데 그친다.
테이블의 열에는 자료형
을 지정해야 한다.
데이터베이스에 따라 다르지만 무엇이든 저장할 수 있는 자료형은 없다.
금액이나 개수처럼 수치 데이터만 다룰 수 있는 열은 수치 자료형
으로 지정하고, 사람의 이름처럼 문자를 다루어야 한다면 문자열형
으로 지정하는 편이 낫다.
문자열의 자료형에는 고정길이
와 가변길이
가 있다.
어느 쪽으로 지정할 것인지는 저장할 데이터를 고려해 결정한다.
예를 들어 주민번호처럼 자리수가 이미 정해져 있는 경우
에는 고정길이 문자열
로 지정하는 편이 좋다.
반대로 '기타'란과 같이 자주 입력되지도 않지만 입력되는 문자열의 변동폭이 클 경우
에는 가변길이 문자열
이 적합하다.
테이블에 기본키 제약
을 거는 경우에는 주의를 기울여야 한다.
테이블의 행에 유일성
을 지정한다는 것은 대단히 중요한 일이다.
하지만 기본키로 지정할 열이 생각나지 않는 경우도 많을 것이다.
이러한 경우 자동증가 열
을 사용해서 기본키로 지정하면 간단하게 해결할 수 있다.
자동증가 열은 INSERT 할 경우 번호를 자동으로 증가시켜 저장
해주는 편리한 열이다.
데이터베이스 제품에 따라 다르지만, MySQL에 경우는 열을 정의할 때 AUTO_INCREMENT
를 지정하는 것으로 자동증가 열이 된다.
AUTO_INCREMENT로 지정한 열은 PRIMARY KEY
또는 UNIQUE
로 유일성을 지정해야 한다.
아무 열이나 자동증가 열로 지정하지 않도록 주의하기 바란다.
2. ER 다이어그램
테이블을 설계할 때 테이블 간의 관계를 명확히 하기 위해 설계도
를 작성하는 경우가 있다.
'ER 다이어그램'
은 이런 경우에 널리 쓰이는 도식이다.
ER의 E는 개체를 뜻하는 'Entity'
의 약자이며 R은 'Relationship'
의 약자이다.
즉, ER 다이어그램은 개체 간의 관계
를 표현한 것이다.
여기서 개체는 테이블
또는 뷰
를 말한다.
ER 다이어그램에서 개체는 사격형으로 표기한다.
사각형의 상단에는 개체 이름을 적고 사각형 안에는 개체의 속성을 표기한다.
여기서 속성은 테이블의 열을 의미한다.
기본키가 되는 열부터 차례로 기술하며, 열 이름은 주로 논리명으로 표기한다.
다음은 ER 다이어그램의 예시 사진이다.