복붙노트

[SQL] SQL : 기본값 대 NULL 값을 사용하여

SQL

SQL : 기본값 대 NULL 값을 사용하여

기본값이 아닌 SQL에서 NULL 값을 사용의 장점과 단점은 무엇입니까?

추신. 많은 유사한 질문이 내 질문을 여기에 요청했지만 아무도 대답했습니다.

해결법

  1. ==============================

    1.출처 : 프로 양론

    출처 : 프로 양론

  2. ==============================

    2.나는 당신이 경우라도 이러한 비교하려는 이유를 알고하지 않습니다. 기본값은 열 우리가 쿼리에서 직접 설정하지 않는 일부 값을 제공하는 동안 약간의 열이 비어 있는지 널 수단은 /, 값이 없습니다.

    나는 당신이 경우라도 이러한 비교하려는 이유를 알고하지 않습니다. 기본값은 열 우리가 쿼리에서 직접 설정하지 않는 일부 값을 제공하는 동안 약간의 열이 비어 있는지 널 수단은 /, 값이 없습니다.

    어쩌면 몇 가지 예를 더 설명 할 것이다. 하자 우리는 회원 테이블을했습니다 말한다. 각 부재는 ID 및 이름을 갖는다. 그는 수도 옵션은 (그러나 그가 필요가 없습니다) 전자 메일 주소가 있습니다. 각 부재 (마다 사용자 기록 소식 증가)을 postCount 열을 갖는다. (이메일은 선택 사항이기 때문에) postCount 열이 NULL이 아니라 (우리는 새로운 멤버를 만들 때 그가 어떤 게시물이 없기 때문에) 기본값 0을 가지고있는 동안 전자 메일 열은 널 값을 가질 수 있습니다.

  3. ==============================

    3.NULL 값은 없습니다 ... 값!

    NULL 값은 없습니다 ... 값!

    널 수단 ... '값이없는 "데이터베이스 양태 옆이 아닌 값 변수 또는 필드의 하나의 중요한 치수는 사용하는 것이 가능하지 않다는 것이다'= '(또는'> ','< ') 변수를 비교할 때.

    같은 뭔가 쓰는 (VB)

    if myFirstValue = mySecondValue
    

    변수 중 하나 또는 둘 모두가 아닌 값 경우 중 하나 참 또는 거짓 반환하지 않습니다. 당신은 같은 '흑자 전환'을 사용해야합니다 :

    if (isnull(myFirstValue) and isNull(mySecondValue)) or myFirstValue = mySecondValue
    

    이러한 상황에서 사용되는 '보통'코드입니다

    if Nz(myFirstValue) = Nz(mySecondValue, defaultValue)
    

    비 값이 변수 "DEFAULTVALUE '값 (일반적으로 길이가 0 인 문자열)의'동일 '것으로 간주되는 바와 같이, 엄밀하게 정확하지 않다.

    이 불쾌한 행동에도 불구하고, 귀중한 이유없이 길이가 0 인 문자열 (또는 '0')에 기본 값을 켜 결코 결코 결코 및 코드에서 값 비교를 완화하는 것은 가치있는 이유가 없습니다.

  4. ==============================

    4.NULL 값은 속성 중 하나를 적용 또는 알 수없는 것을 나타 내기위한 것입니다. 그들이 좋은 일이나 나쁜 일이있어하지만 난 "좋은 일"캠프에 빠지지 여부를 싸웠다 종교 전쟁이있다.

    NULL 값은 속성 중 하나를 적용 또는 알 수없는 것을 나타 내기위한 것입니다. 그들이 좋은 일이나 나쁜 일이있어하지만 난 "좋은 일"캠프에 빠지지 여부를 싸웠다 종교 전쟁이있다.

    그들은 종종 많은 상황에서 알 수없는 값에서 알려진 값을 구별하는 데 필요한 그들은 적절한 기본값을하지 않는 속성에 대한 감시 값이 필요합니다.

    은행 잔고에 대한 기본 값이 0이 될 수 있습니다 동안 예를 들어, 휴대 전화 번호의 기본값 것입니다. 당신은 "고객이 어떤 휴대 전화가 없습니다"하고 어떤 경우에는 빈 열이하지 않을 것이다 "고객의 휴대 전화 번호는 (아직) 알 수 없습니다"를 구분해야 할 수 있습니다 (그리고 여분의 열이있는 것은 그 열이 하나 또는 여부를 결정하기 위해 기타) 좋은 생각이 아니다.

    기본 값은 명시 적으로 지정하지 않을 경우 DBMS가 칼럼에 넣어 무슨 간단하다.

  5. ==============================

    5.나를 위해, 그들은 다소 직교한다.

    나를 위해, 그들은 다소 직교한다.

    기본 값은 정상적으로 클라이언트 코드를 수정할 필요없이 (추가 열을 생각) 데이터베이스 스키마를 진화 할 수 있습니다. 게다가, 그들은 어떤 입력을 저장하지만,이 디폴트 값에 의존하는 것은 IMO 나쁘다.

    널 (null)는 점이다 : 널 (null). 3 치 논리를 처리 할 때 값과 큰 피타가 없습니다.

  6. ==============================

    6.그것은 상황에 따라 달라집니다,하지만 정말 궁극적으로 간단합니다. 어느 쪽이 진실에 더 가깝다?

    그것은 상황에 따라 달라집니다,하지만 정말 궁극적으로 간단합니다. 어느 쪽이 진실에 더 가깝다?

    그냥 데이터를, 그리고 진실은 중요하지 않습니다 것처럼 많은 사람들이 데이터를 처리. 당신은 데이터의 이해 관계자들에게 이야기 할 때마다 그러나, 그 진실은 항상 중요한 찾을 수 있습니다. 때로는 이하, 때로는 더, 그러나 항상 문제.

    당신이 사용자 (또는 다른 데이터 소스) 값을 제공 한 경우, 값이 기본했을 것으로 추정 할 수있는 경우 기본 값은 유용합니다. 이 가정은 다음 좋은 해를 더 않는 경우, NULL은 NULL을 처리하는 SQL에 통증이 경우에도 좋습니다.

    참고 기본 값이 구현 될 수있는 세 가지 방법이 있다는 것을. 첫째, 응용 프로그램에서 이전에 새로운 데이터를 삽입. 데이터베이스는 사용자 나 응용 프로그램에서 제공되는 선택 사항 중 하나가 제공하는 기본 값 사이의 차이를 볼 수 없습니다!

    둘째, 열에 대한 디폴트 값을 선언하고, 삽입 누락 데이터 두어.

    셋째, NULL이 감지 될 때마다, 검색시 디폴트 값을 대체하여. 불과 몇 DBMS 제품이 세 번째 모드는 데이터베이스에 선언 할 수 있도록.

    이상적으로, 데이터는 결코 실종되지 않습니다. 당신은 현실 세계에 대한 개발하는 경우, 필요한 데이터는 결국 누락됩니다. 귀하의 응용 프로그램 중 하나를 의미하거나 그렇게되면 이해가되지 않습니다 무언가를 만드는 일을 할 수 있습니다.

  7. ==============================

    7.데이터웨어 하우스에서, 당신은 항상 기본 값이 아닌 널 (null)을 갖고 싶어한다.

    데이터웨어 하우스에서, 당신은 항상 기본 값이 아닌 널 (null)을 갖고 싶어한다.

    대신은 "알 수없는", "준비가되지", "실종"으로 값을 가질 것

    이 INNER는 '모든 것이 항상 값을 갖는'로 팩트 및 차원 테이블에 효율적으로 수행 할 수 조인 할 수 있습니다

  8. ==============================

    8.많은 것들과 마찬가지로, 각각 장단점이있다.

    많은 것들과 마찬가지로, 각각 장단점이있다.

    기본 값에 대한 좋은 점 : 그들은 당신에게 다른 값을 지정하지 않으면 알려진 값에 열을 설정할 수있는 기능을 제공합니다. BOOLEAN 열을 생성 할 때 예를 들어, 나는 일반적으로 열을 (적절한 무엇이든 TRUE 또는 FALSE) 디폴트 값을 제공하고, 열 NOT NULL을합니다. 이런 식으로 나는 컬럼에 값이있을 것이라는 점을 확신 할 수 있으며, 세트 적합 할 것입니다.

    기본 값에 대한 나쁜 점 : 모든 것이 디폴트 값을가집니다.

    널 (NULL)에 대한 좋은 것들 : 모든 것이 항상 알려진 값을가집니다. 사람을 대표하는 새 행을 만들 때 예를 들어, 나는 모든 열 값이 없을 수 있습니다 -의 내가 자신의 이름을 알고 있지만 자신의 생년월일 가정 해 봅시다. 생일에 대한 기본 값에 넣어 적절한 아니에요 - 사람들은 자신의 생일 실제로 7 월 22 일의 경우 (즉, 기본값 인 경우) 1 월 1 일에 생일 카드를 받고 좋아하지 않는다.

    나쁜 널 (NULL)에 대한 일 : 널 (NULL)은 취급에주의가 필요합니다. 일반적으로 구현 널 (NULL)과 관계형 모델을 기반으로 대부분의 데이터베이스에서 독이다 - 계산에서 NULL의 존재는 계산의 결과가 NULL이됩니다. 비교에 사용되는 NULL을 할 수도 있습니다 예기치 않은 결과 원인 때문에 (도 TRUE 나 FALSE입니다) NULL 반환 UNKNOWN 어떤 비교. 예를 들어, 다음과 같은 PL / SQL 스크립트를 고려 :

    declare 
      nValue NUMBER;
    begin
      IF nValue > 0 THEN
        dbms_output.put_line('nValue > 0');
      ELSE
        dbms_output.put_line('nValue <= 0');
      END IF;
    
      IF nValue <= 0 THEN
        dbms_output.put_line('nValue <= 0');
      ELSE
        dbms_output.put_line('nValue > 0');
      END IF;
    end;
    

    이들의 출력은 :

    nValue <= 0
    nValue > 0
    

    이것은 조금 의외 일 수도있다. 사용자는 적어도이 코드에 따라, 둘 이하이다 NUMBER (nValue)가 제로보다 큰 제로인. 이런 일이 발생하는 이유는 nValue 실제로 NULL 및 UNKNOWN 대신 TRUE 또는 FALSE에서 NULL 결과 모든 비교 것입니다. 이 파악하기 어려운 미묘한 버그가 발생할 수 있습니다.

    공유하고 즐길 수 있습니다.

  9. ==============================

    9.널 (null)과 기본 값은 서로 다른 목적으로 사용되는 다른 것들입니다. 당신이 모든을 디폴트 값을 제공하여 널 (null)을 사용하지 않도록하려는 경우, 그것이 내가 설명 할 것 같은 가난한 좋습니다.

    널 (null)과 기본 값은 서로 다른 목적으로 사용되는 다른 것들입니다. 당신이 모든을 디폴트 값을 제공하여 널 (null)을 사용하지 않도록하려는 경우, 그것이 내가 설명 할 것 같은 가난한 좋습니다.

    널 수단은 우리가 값이 또는 일 무슨 모른다. 예를 들어 당신이 ENDDATE 필드가 있다고 가정합니다. 기록중인 프로세스가 끝날 때 널 (null)이 유일한 적절한 값 그래서 당신은 모른다; 미래에서 일부 가짜 날짜 방식의 기본값을 사용하면 널 (null) 처리로 주위를 프로그램 할 많은 문제로 야기하고 잘못된 결과가 반환에 문제를 만들 수있는 내 경험에 더 가능성이 있습니다.

    이제 우리는 기록을 삽입하는 사람이하지 않는 경우 값이해야 알 수있는 시간이있다. 당신이 날짜 삽입 필드가있는 경우 예를 들어, 현재 날짜의 기본값이 사용자가이를 채우기 위해 기대하지하는 것이 적절하다. 당신은 가능성이 사실이 필드의 방법이 더 나은 정보를 가지고 있습니다.

    때때로, 그것은 판단 호출 그리고 당신이 적용 할 수있는 비즈니스 규칙에 따라 달라집니다. 당신이 (스피커가 지불 할 금액입니다) 스피커 사례금 필드가 있다고 가정. 디폴트 값 0은 스피커가 고용과 우리가 아무것도 지불하려는 것을 의미 할 수 있습니다 그것으로 위험 할 수 있습니다. 제로는 정확한 값입니다 당신이 제로를 사용할 수 있도록, 거기에 가끔 특정 프로젝트에 대한 자신의 시간을 기부하는 스피커 수 (또는있는 회사의 직원과 이렇게 이야기하는 별도 지불하지) 수도 가능 값이이 스피커를 지불하는 방법을 많이 알고하지 않는 것이 확인합니다. 이 경우 널 유일한 적절한 값이며, 누군가가 회의에 스피커를 추가하려고하면 코드는 문제를 유발한다. 다른 상황에서, 당신은 어떤 스피커가 지급됩니다 최소 3000과 협상 한 만 스피커가 다른 속도로 데이터가 사례금 필드에 입력 한 것을 이미 알고있다. 이 경우, 다른 경우에 3000의 기본값에 넣어 적절한 기본은 보통 자동으로 해당 클라이언트에 대한 최소의 사례금 값을 채우는 조회 테이블을 통해 다른 (처리되어야하므로, 다른 클라이언트가 다른 최소를 가질 수있다 데이터 입력 양식.

    내가 느끼는 그래서 가장 좋은 규칙은 당신이 진정으로 데이터가 필드의 값이해야 무엇을 입력 한 시간에 알 수없는 경우는 null로 값을두고있다. 단지 그것을 특정 상황에 항상 의미가되는 기본값을 사용하고 서로 다른 상황에서 서로 다른 수의 경우는 값을 채우기 위해 다른 기술을 사용합니다.

  10. ==============================

    10.그래서이 토론의 모든 주셔서 감사합니다. 나는 데이터웨어 하우스를 구축하고 오히려 엄격하게 킴볼 모델을 사용하고의 중간에입니다. 대리 키를 미워하고 사방에 널 (null)을 원하지만 하나의 매우 보컬 사용자가,있다. 나는 차원의 속성과 기본 값이 잘못된 데이터가 의미하기 때문에 계산에 사용되는 모든 날짜 나 숫자에 대한 별도의 조회를 확인이라고 그에게 말했다. 더미 레코드 나는 특정 컬럼에 NULL을 허용하는 장점 동의하지만 대리 경우에도, 치수에 대한 모든 외래 키에 대한 대리 키가있는 경우는 품질과 신뢰성 향상에 많은 큐빙하게 -1 또는 0,있다 . SQL은 대한 조인 정수를 좋아하는이 누락 된 치수 값이고 더미가 대리 키로 제공되는 경우에, 당신은 당신이 다른 차원에 큐빙 것처럼 기록 같은 수의 한 차원을 사용하여 얻을 것이다. 그러나 계산은 정확하게 수행해야하고 당신은 그에서 NULL 값에 대한 수용해야합니다. 그 나이 예를 들어, 계산되지 않도록 생일은 NULL이어야한다. 나는 좋은 데이터 거버넌스와 그 어느 때보 방법으로 자신의 데이터에 대해 생각하는 사용자의 힘을 그들과 함께 이러한 결정을 믿습니다.

    그래서이 토론의 모든 주셔서 감사합니다. 나는 데이터웨어 하우스를 구축하고 오히려 엄격하게 킴볼 모델을 사용하고의 중간에입니다. 대리 키를 미워하고 사방에 널 (null)을 원하지만 하나의 매우 보컬 사용자가,있다. 나는 차원의 속성과 기본 값이 잘못된 데이터가 의미하기 때문에 계산에 사용되는 모든 날짜 나 숫자에 대한 별도의 조회를 확인이라고 그에게 말했다. 더미 레코드 나는 특정 컬럼에 NULL을 허용하는 장점 동의하지만 대리 경우에도, 치수에 대한 모든 외래 키에 대한 대리 키가있는 경우는 품질과 신뢰성 향상에 많은 큐빙하게 -1 또는 0,있다 . SQL은 대한 조인 정수를 좋아하는이 누락 된 치수 값이고 더미가 대리 키로 제공되는 경우에, 당신은 당신이 다른 차원에 큐빙 것처럼 기록 같은 수의 한 차원을 사용하여 얻을 것이다. 그러나 계산은 정확하게 수행해야하고 당신은 그에서 NULL 값에 대한 수용해야합니다. 그 나이 예를 들어, 계산되지 않도록 생일은 NULL이어야한다. 나는 좋은 데이터 거버넌스와 그 어느 때보 방법으로 자신의 데이터에 대해 생각하는 사용자의 힘을 그들과 함께 이러한 결정을 믿습니다.

  11. ==============================

    11.한 응답자는 이미 말했듯이, NULL은 값이 아닙니다.

    한 응답자는 이미 말했듯이, NULL은 값이 아닙니다.

    이 값 인 것처럼 "NULL 값"말하고 누군가에 의해 선포 것도 매우 도자기합니다.

    NULL 자체가 동일하지 않습니다. x 및 y 모두가 NULL 인 경우, X = Y 거짓 산출한다. x 및 y가 모두 디폴트 값 인 경우에 해당 X = Y 산출한다.

    이 겉으로는 아주 간단한 차이가 거의 끝이없는 결과가있다. 그리고 그 결과의 대부분은 당신에게 진짜 나쁜 물린 부비 트랩이다.

  12. ==============================

    12.앨런 브라운에 의해 널 (null)에 대한 두 개의 매우 좋은 접근 지향 기사 :

    앨런 브라운에 의해 널 (null)에 대한 두 개의 매우 좋은 접근 지향 기사 :

    VBA 코드에 널 (null) 작업의 측면 :

    기사는 액세스 지향하지만, 데이터베이스 때문에 쓰기의 대화 스타일 특히 상대 초보자를 사용하는 사람들에게 도움이 될 수 있습니다.

  13. ==============================

    13.NEVER OS / 390 및 z / OS 용 DB2의 저장 공간에 저장 널. 모든 널 (NULL) 컬럼은 널 (null) 표시기의 저장 하나의 추가 바이트가 필요합니다. 널 지시자에 대한 데이터 (10) 및 1 - 따라서 널 인 CHAR (10) 열은 행 당 11 바이트의 저장을 필요로 할 것이다. 이없이 열이 NULL로 설정 아닌지 여부의 경우이다.

    NEVER OS / 390 및 z / OS 용 DB2의 저장 공간에 저장 널. 모든 널 (NULL) 컬럼은 널 (null) 표시기의 저장 하나의 추가 바이트가 필요합니다. 널 지시자에 대한 데이터 (10) 및 1 - 따라서 널 인 CHAR (10) 열은 행 당 11 바이트의 저장을 필요로 할 것이다. 이없이 열이 NULL로 설정 아닌지 여부의 경우이다.

    Linux, UNIX 및 Windows 용 DB2는 공간을 절약하기 위해 null로 설정 열 수있는 압축 옵션이 있습니다. DB2가이 옵션을 원인 사용하면 열이 널 (null)로 설정 행에서 사용되지 않는 공간을 제거합니다. 이 옵션은하지만, 메인 프레임을 사용할 수 없습니다.

    REF : http://www.craigsmullins.com/bp7.htm

    그래서, DB2 Z / OS를위한 최고의 모델링 방법은 모든 열에 대한 표준으로 "NOT NULL WITH DEFAULT"를 사용하는 것입니다. 그것은 내가 아는 몇 가지 주요 상점에 따라 동일합니다. 더 쉽게 프로그래머의 수명이 널 (NULL) 표시기를 처리하는 데 실제로 NULL 인디케이터 (indicator)의 추가 바이트를 사용하는 필요성을 제거함으로써 스토리지에 저장하지 만든다.

  14. from https://stackoverflow.com/questions/2116719/sql-using-null-values-vs-default-values by cc-by-sa and MIT license