2010-01-29 6 views

답변

11

일 수 있습니다. "알 수 없음"또는 누락 된 값을 표시하는 것이 유용합니다.

예를 들어 사용자를 저장하고있는 필드 중 하나가 생일 인 경우 "태어났다는 것을 알지 못합니다"라는 의미로 NULL이 될 수 있습니다.

동일한 유형의 의미에 대해 동일한 의미를 갖는 "마법 값"을 지정해야하는 nullable 필드가없는 것과는 대조적입니다.

예를 들어 생일 필드에 "그가 태어 났는지 여부를 모르겠다"는 것을 의미하는 날짜를 저장해야합니까? 1970-01-01 마술 가치가 있어야합니까? 우리가 갑자기 그 날에 태어난 사람을 저장할 필요가 있다면?

이제는 NULL이 값의 전파 속성이기 때문에 데이터베이스 설계 및 엔진에서 다루기가 더 어려운 문제 중 하나입니다.

SELECT * 
FROM people 
WHERE birthday > #2000-01-01# 

SELECT * 
FROM people 
WHERE NOT (birthday > #2000-01-01#) 

(주는, 위의 날짜 구문은 데이터베이스 엔진에서 법적되지 않을 수도 있습니다, 그것을 끊었되지 않음)

: 예를 들어

는 다음 중 결과 것입니다

"알 수없는"생일을 가진 많은 사람들이있는 경우, 즉. NULL 인 경우 결과에 나타나지 않습니다.

위의 두 쿼리에서 첫 번째 쿼리는 "조건 X를 가진 모든 사람"이라고하고 두 번째 쿼리는 "조건 X가없는 모든 사람"이므로 두 쿼리의 결과가 모두 데이터베이스의 사람들.

그러나 쿼리는 실제로 "알려진 확실한 기준 X를 가진 모든 사람들"이라고 말합니다.

이것은 "나는 40 세보다 나이가 많습니까?"라고 묻는 것과 비슷합니다. 다른 사람은 "나는 모른다"고 말합니다. 그런 다음 "41 세 미만입니까?"라고 묻는다면, 대답은 똑같을 것이고, 그는 여전히 모릅니다.

또한 모든 수학 또는 비교는 NULL도 생성합니다.

는 예를 들어, 무엇인가 : "10 + 알 수없는"아직 알 수 없기 때문에

SELECT 10 + NULL AS X 

결과는 NULL입니다.

6

:

관계형 데이터베이스 모델, EF 커드의 창조자에 의해 도입은 SQL 널은 요구 사항을 충족하는 역할을 모든 사실 관계 데이터베이스 관리 시스템 (RDBMS) 지원 "누락 된 정보 및 적용 할 수없는 정보가 표시되지 않음"

+0

와우, 나는 위키 백과에 대한 대답과 비슷한 답변을 자랑스럽게 생각합니다.) –

+0

제가 이해하는 바와 같이, Codd는 관계형 데이터베이스 시스템은 누락 된 데이터를 체계적으로 처리해야한다고 말했습니다. NULL은 그런 방식이지만, 비록 Wikipedia가 그렇게 말할지라도 SQL NULL이 Codd의 발명품이라는 것을 확신하지 못합니다. –

1

"나는 모른다", 또는 "중요하지 않습니다"로 가득 찬 칼럼과 같은 뭔가. 예를 들어 고객 표에 전화 번호를 기입하지 않으면 전화 번호 입력란에 무엇을 입력합니까?

+0

빈 문자열은 그 목적을 잘 채울 것입니다. – truppo

+0

숫자, 참/거짓 또는 빈 문자열이 그 자체로 의미가있는 경우 어떻게됩니까? –

+0

전화 번호는 수학적 의미에서 숫자가 아닙니다. 빈 문자열이나 $$$ - $$$ - $$$$과 같은 다른 무효 문자는 사용자가 입력 할 수없는 한 쉽게 테스트 할 수있는 기본값과 마찬가지로 작동합니다. –

0

값의 부족을 나타냅니다.

NULL은 테이블에 선택적 데이터를 저장하는 데 사용할 수 있습니다. 자동차 테이블이 있다고 해. 모든 차량에 트렁크가있는 것은 아니므로 TrunkSpace 열은 NULL

0

나는 JRL/Wikipedia의 답변을 좋아합니다. 실제 값으로 기본값을 설정하지 않으려는 경우 열을 NULL로 채우는 것이 바람직 할 때가 있습니다. 내 말은, varchar로 작업 할 때 NULL 대신 빈 문자열을 사용할 수있는 경우가 있다는 것입니다. 그러나 약간 또는 날짜 유형은 어떨까요? 비트 열이 사용되면 기본값을 0 또는 1로 설정하면 충분하지 않을 수 있습니다. 그리고 날짜 유형에 대한 기본 날짜는 무엇입니까?

일부 시스템에서는 NULLS를 사용해야하는 이유가 하나 더 있습니다. SQL Server 2008에는 NULL 값에 대해 최적화 된 저장소가있는 sparse columns이라는 개념이 도입되었습니다. 대부분 비어있을 가능성이있는 열 (또는 대부분 정밀함)이있을 때 사용하는 것이 가장 좋습니다.

0

"무엇을 사용하고 유용하게 사용합니까?"

누락 된 정보를 해결하는 문제를 "해결"(인용 부호로 적어주십시오)하는 데 사용됩니다.

소프트웨어 설계 문제와 소프트웨어 구현 문제 (가장 뻔뻔한 것이 '(x == y) ==! (x == y)'로 요약 될 수 있음)와 같은 똥 하중을 생성하는 데 유용합니다. 다시 말하면 널을 피할 수 없다고 주장하는 프로그래머들의 똥 짐을 위해 일자리 보안을 만드는 데 유용합니다.

+0

그리고 실용적인 설명을 제공 할 수없는 사람들로부터 끊임없는 호언 장담을 생성하는 데 유용합니다 그들의 불안이나 실용적인 대안을 위해,하지만 망할 잘 의견을 가지고 있고 그것을 잊지 못하게하려고하지 않습니다. -1. – Aaronaught

+1

실용적인 대안을 "수직 분해"라고합니다. 또 다른 대안은 "제약 별 전문화를 사용하여 누락 된 정보를 처리하는 방법"입니다. 세 번째는 "다중 송신"입니다. 그리고 저는 '(x == y)! =! (x == y)'의 예제를 아주 신의 실용적인 설명이라고 생각합니다. –

+0

죄송합니다. '(x == y) ==! (x == y)' –

0

this question을 확인하십시오.

"Null"은 기본적으로 "그럴 가치가 없습니다"를 의미하지만 "알 수없는 값"을 의미 할 수도 있습니다. 따라서 그 해석은 때때로 모호합니다. 생년월일과 운전 면허증이 모두있는 사람 표를 생각해보십시오. 생년월일 필드에 가치가 없다면 분명히 날짜가 알려지지 않았 음을 의미합니다 (요즘은 모두 태어났습니다 ...). 이제 운전 면허증 입력란에 아무런 가치가없는 경우 운전 면허가 없거나 그 번호를 알 수 없다는 뜻입니까?

0

It 특정 레코드에 대해 데이터베이스에 삽입 할 때 "누락 된 값"또는 "알 수없는 값"을 단순히 나타냅니다.

관련 문제