by-nc-sa     개발자, DBA가 함께 만들어가는 구루비 지식창고!

NULL에 관해서




널(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은 번호를 모른다는 의미, ''은 휴대폰이 없다는 의미로 쓰일 수 있음)
  • 금액을 관리하는 속성에 널을 허용하면 금액 집계 시 원치 않는 결과 발생가능

문서정보

Enter labels to add to this page:
Please wait 
Looking for a label? Just start typing.