본문 바로가기
프로젝트

[데이터베이스 설계] Null을 피해야 하는 이유?

by 더하리 2024. 10. 13.

 

NULL 이란?

📖 NULL은 구조적 질의언니(SQL)에서 데이터베이스 내의 데이터 값이 존재하지 않는다는 것을 지시하는 데 사용되는 특별한 표시어이다. (출처: 위키백과)

 

적혀있는 것처럼 NULL은 데이터가 존재하지 않는다는 것을 의미하며 알 수 없는 값이라는 의미 역시 가지고 있다.

숫자 0이나 String ' ' 도 아닌 단순히 '없음'인 것이다.

 

만약, NULL을 허용하도록 설정하면 값이 없을 경우 자동으로 NULL이 들어가게 되는데...!

쉬우면서도 어려운 존재가 이 NULL이라는 것이다.

 

 

그렇다면 왜 NULL을 피해야하는 걸까?

NULL은 프로젝트에서 의도치 않는 문제를 야기하기도 하는데 

1. 수치 연산, 비교 연산 등 모두 NULL을 반환
2. 의도치 않은 검색 결과가 나오기도 함
3. 옵티마이저 구현에 악영향(성능↓)

 

 

1. 연산에서의 어려움

만약 사칙연산을 한다고 해보자.

출처: https://khdscor.tistory.com/53

 

답은 모두 NULL이다.

NULL 값은 알 수 없는 값이기 때문에 알 수 없는 값에 특정 값을 + , - , * , / 와 같은 사칙연산 하고 싶다고 해도 연산을 할 수 없는 것이다.

 

비교 연산 (=,>,>=,!=) 은?

출처: https://khdscor.tistory.com/53

역시 마찬가지로 NULL이 비교대상일 경우, 비교가 불가능하다.

번호에서 1번만 값이 나오고 2,3,4번은 비교가 불가하다..!

 

 

2. 의도치 않은 검색 결과

출처: https://www.sunny-son.space/MySQL/RDBMstart07/

 

위 쿼리문에 대한 결과는 " 값이 NULL이 아닌 사람 중 나이가 20살이 아닌 사람" 이지만

실제로 원하는 결과는 "나이가 20살이라고 알려진 사람을 제외한 모든 사람" 이라면

출처: https://www.sunny-son.space/MySQL/RDBMstart07/ 우

위처럼 NUL에 대한 처리를 따로 진행해야 한다.

 

 

3. 옵티마이저 구현에 악영향

옵티마이저의 큰 역할은 쿼리의 실행이 최적의 성능을 내도록 바꿔주는 것이다.

그러나 NULL이 들어갈 경우, 수학적으로 증명할 수 있는 조합이 많이 줄어들어 옵티마이저가 별다른 일을 못하고 사람이 노력하여 직접 쿼리를 튜닝해야 한다.

  

이러한 쿼리의 재작성 뿐만 아니라 쿼리의 비용계산에서도 악영향이 있다.

NULL이 있는 인덱스 항목은 인덱스의 제일 앞 혹은 뒤에 몰아서 배치되는데 행이 늘어날 수록 IS NULL을 스캔하는 시간이 길어져 원하는 값을 출력하는데 더 긴 시간이 걸릴 수 있다. 

 

 

 

결론

즉, NULL사용하지 않는 편이 좋지만 필요에 따라 또는 프로젝트 특성을 고려한 설계에 따라 사용은 할 수 있겠다.

 

 

 


*참고자료*

 

 

관계형 데이터베이스 실전 입문 - 07. NULL과의 싸움

강력한 데이터 모델인 관계형 모델이지만 SQL에서는 이를 아주 간단하게 파괴할 수 있는 것이 존재한다. NULL이다. 1. NULL RDB에서는 NULL을 피해야 한다고 알려졌다. 릴레이션에는 NULL이라는 개념이

www.sunny-son.space

 

 

데이터 베이스 NULL에 대한 기본적인 내용

이번 글에서는 NULL에 대한 기본적인 내용과 NULL에 대해 조심해야 할 점들을 간략히 적어보려고 한다. 이 글은 '개발자를 위한 인덱스 생성과 SQL 작성 노하우(이병국)'을 참고하여 작성하였다. 위

khdscor.tistory.com

 

왜 Null이 나쁜가? | Mimul Tech log

Null의 나쁜점에 대해 기술함.

www.mimul.com

 

 

Why NULL is Bad?

Why NULL is a terrible practice in object-oriented programming? Despite the fact that it is used a lot and everywhere, this article tries to explain why you should give up this bad habit.

www.yegor256.com