기본값 설정 관련 문의 0 2 630

by 나는짱이야 [SQLServer] [2020.07.27 20:04:50]


안녕하세요. 테이블 설계시 어떤방향이 정석인지 인지 하지 못해서 질문 올립니다.

우선 저의 경험상 Table신규 생성시 Default value 및 컬럼의 NULL유무에 따라서 테이블 생성하게되는데요.

현 재직중인 회사에 테이블들을 살펴보면 Default Value설정은 없을뿐더라 NULL조차도 허용하지 않는 테이블이 많더군요.

업무적인 측면에서 생각했을때 Default Value설정과 NULL유무는 필수라고 생각하는데.아이러니 하긴 합니다.

NULL값 대신 0또는 쓸모없는 쓰레기 값(?)을 넣어서 처리해야 Index스캔을 잘 수행한다고 하니..이걸 어떻게 이해할지 잘모르겠습니다.

경험 많으신분들 의견 부탁 드립니다.

감사합니다.

by 우리집아찌 [2020.07.28 09:07:34]

SQL SERVER 쓰시나요?

그냥 제생각을 말하자면

1. 일단 SQL SERVER 에서는 NULL , "" 이게 틀리게 조회되기때문에 귀찮아서 NOT NULL 처리가 될수도 있어요.

2. WHERE 컬럼 IS NULL 은 INDEX를 이용하지 못합니다 TALBE FULL SCAN으로 되니 ,

   아마 WHERE 컬럼 = 0 이런식으로 조회하려고 한것같아요 0 을 NULL 처럼 쓰는것이지요

3. "업무적인 측면에서 생각했을때 Default Value설정과 NULL유무는 필수라고 생각하는데.아이러니 하긴 합니다." 

   <= 요건 필수라기 보다 현재 구조에 맞게 사용하는것이 맞다고 생각됩니다. 

        예를들어서 업무중에 NULL 이 필요하게되면 NULL을 써야하고 필요없으면 디폴트값이나 NOT NULL 처리 하게 됩니다.

        강제로 무조건 A->A , B->B 이렇게 공식적으로 되지는 않습니다.

        모델링은 정답이 없습니다 .. ^^*        

 

 


by 마농 [2020.07.28 09:14:25]

해당 데이터의 특성에 맞게 널 허용 여부를 결정해야 한다고 생각합니다.
무조건적인 NULL 금지는 다른 부작용을 낳을 수 있다고 생각합니다.
아무것도 넣고 싶지 않은데 0 이 들어간다거나.
0 을 넣고 싶어서 0 을 넣었는데 아무것도 넣지 않은 것처럼 취급되는 경우.

인덱스 스캔의 경우도 한쪽면만 보면 안됩니다.
널 대신 다른 값을 넣어 인덱스 스캔을 하도록 하는 경우는
널을 찾고자 하는 목적일 때에만 해당하는 얘기입니다.
다른 목적일 경우에는 해당되지 않는 내용입니다.
이렇게 특정 경우에만 해당되는 내용을 전체에 적용하게 되면 부작용이 발생되기 마련입니다.

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