관계형 데이터 모델링 프리미엄 가이드 DB구축 (2014년)
NULL에 관해서 0 0 40,957

by 구루비스터디 NULL [2018.06.10]


널(NULL)이 사용되는 경우

  • 속성의 값을 알 수 없을 때
  • 속성의 값이 '해당 사항이 없는 경우' (예 : 고객 엔터티에서 개인과 법인을 같이 관리할 경우 생년월일 속성은 법인의 경우 해당 사항이 없으므로 널을 가지게 됨)


널의 관리방법

  • 데이터를 입력하는 시점에 입력할 값을 모르면 널(NULL)을 허용하는 것이 원칙
  • 해당사항이 없는(적용할 수 없는 값)과 알 수 없는 값을 구분하여 관리
  • 아래 그림 9.16의 경우 주문취소사유코드가 해당없음은 1로 모름은 9로 관리하고 있음



  • 널을 허용하지 않고 실제로 값을 모르는 상태인 경우 디폴트 값을 지정하여 관리할 수 있음
  • 낮은 분포도를 가진 속성은 인덱스 범위 스캔이 되지 않도록 널 값을 사용하는 것을 고려
  • 높은 분포도를 가진 속성은 기본 값을 사용해 테이블 풀 스캔이 되지 않도록 고려
  • 코드나 여부, 유무 속성읠 때는 Not null로 지정
  • 일자 속성 등에는 Null 허용 대신, 9999-99-99나 3000-12-31 등과 같이 디폴트 일자를 지정하여 사용하는 것이 편리
  • 서브타입별로 속성이 집단적으로 널 값을 가진다면 1:1 엔터티로 분리하여 널이 생성되지 않도록 하는 것이 바람직


널 사용시 유의점

  • 그룹함수(sum, avg, count, max, min 등)는 널은 연산 대상에서 제외하므로 주의가 필요
  • 널은 보통 인덱스에 포함되지 않음
  • 많은양의 데이터 누적시 NVL은 치명적인 성능 결함이 발생할 수 있으므로 최소화하여 사용
  • 외래 식별자 속성에 널 값이 존재하면 아웃터 조인(Outer Join)을 고려(Inner Join 시 원치 않는 결과 발생 가능)
  • 데이터 마이그레이션 시 널 여부 고려(기존 데이터는 널 허용이나 마이그레이션 하는 속성이 Not null 일 경우)
  • NULL과 '' 의 의미가 서로 다를 수 있으므로 사용에 주의(휴대폰 번호의 경우 NULL은 번호를 모른다는 의미, ''은 휴대폰이 없다는 의미로 쓰일 수 있음)
  • 금액을 관리하는 속성에 널을 허용하면 금액 집계 시 원치 않는 결과 발생가능


"구루비 데이터베이스 스터디모임" 에서 2014년에 "관계형 데이터 모델링 프리미엄 가이드" 도서를 스터디하면서 정리한 내용 입니다.

- 강좌 URL : http://www.gurubee.net/lecture/3633

- 구루비 강좌는 개인의 학습용으로만 사용 할 수 있으며, 다른 웹 페이지에 게재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^

- 구루비 강좌는 서비스 제공을 위한 목적이나, 학원 홍보, 수익을 얻기 위한 용도로 사용 할 수 없습니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입