반응형
관계형 모델에서 관계 (테이블)는 한 주제에 대해서만 기술해야 합니다.
즉, 동일한 주제를 가진 데이터를 하나의 테이블로 정리해야합니다.
속성 (컬럼)은 테이블의 주제를 설명하는 유일한 "특성"과 관련된 데이터입니다.
즉, 주제가 가지는 하나의 특성을 하나의 컬럼으로 만들면 됩니다.
컬럼에 하나의 특성만 저장되는게 좋은 이유는 뭘까요?
이 경우 검색을 하거나 값을 집계할 때 특성값을 분리하기 쉽기 때문입니다.
특히, 중요한 개별 특성에 대해 하나의 컬럼으로 분리하는 설계 상 훨씬 바람직합니다.
예를 들어, 아래의 테이블이 있다고 합시다.
ID |
FullName |
FullAddress |
1 |
이 순신 |
320-10, 경기도 A시 |
2 |
이 성계 |
340-20, 경기도 B시 |
3 |
이수 김 |
350-30, 충청남도 C시 |
이 테이블에는 다음의 문제들이 있습니다.
1. 성을 찾기가 어렵습니다. "이"씨 성을 찾으려고 "이"로 시작하는 이름의 로우를 찾으면 성이 "김"이지만 "이"로 시작하는 "김이수"가 검색될 수도 있습니다.
2. 이름 검색 시 LIKE이나 substring을 이용해서 쿼리 성능이 떨어집니다.
3. 우편번호를 검색하려해도 상기 문제점들이 공통적으로 존재합니다.
4. GROUP BY 사용 시 어려움은 더더욱 많아집니다.
이런 문제들을 해결하기 위해서 FullName 컬럼을 FirstName, LastName이라는 특성을 기반으로 컬럼은 나누고, FullAddress도 나눈 데이터 설계를 할 수 있습니다.
ID |
LastName |
FirstName |
ZipCode |
Address |
1 |
이 |
순신 |
320-10 |
경기도 A시 |
2 |
이 |
성계 |
340-20 |
경기도 B시 |
3 |
김 |
이수 |
350-30 |
충청남도 C시 |
컬럼을 단일 특성을 기반으로 만들 시, 상기의 검색이나 그루핑 문제들을 손쉽게 해결할 수 있음을 확인할 수 있습니다.
반응형
'프로그래밍 > sql' 카테고리의 다른 글
[sql] 테이블에 기본키를 만들어야 하는 이유 (0) | 2020.11.16 |
---|
댓글