|
[필독] 처음 오시는 분을 위한 안내 (735) |
정은준1 |
2014-05 |
5141112 |
0 |
2014-05
5141112
1 정은준1
|
|
(광고) 단통법 시대의 인터넷가입 가이드(ver2.0) (234) |
백메가 |
2015-12 |
1675767 |
25 |
2015-12
1675767
1 백메가
|
99347 |
LSI 9271-8i 는 raw모드를 지원하지 않나요 ? (7) |
캔위드 |
2020-03 |
2742 |
0 |
2020-03
2742
1 캔위드
|
99346 |
VMware vsphere상에서 RHCS구성시 MSCS 설정 같게 하면 될까요? |
다함께싸다구 |
2020-10 |
2742 |
0 |
2020-10
2742
1 다함께싸다구
|
99345 |
GTX 980의 쿠다와 그래픽 작업의 관계 (3) |
kking |
2018-11 |
2743 |
0 |
2018-11
2743
1 kking
|
99344 |
p5ql 개조바이오스 (3) |
마초 |
2019-05 |
2743 |
0 |
2019-05
2743
1 마초
|
99343 |
'해님 달님' 이야기(설화)에 대해 (6) |
김영기 |
2019-10 |
2743 |
0 |
2019-10
2743
1 김영기
|
99342 |
DDR3 ECC/REG 메모리 불량 이슈 .. (8) |
죠슈아 |
2022-03 |
2743 |
0 |
2022-03
2743
1 죠슈아
|
99341 |
아.고수님들 이 노트북 버려야 되나요? (29) |
싱어송라이터 |
2024-05 |
2743 |
0 |
2024-05
2743
1 싱어송라이터
|
99340 |
[도움요청]레노버 530-8I RAID카드 부팅시 문제 (2) |
comduck |
2021-08 |
2743 |
0 |
2021-08
2743
1 comduck
|
99339 |
회전하는 드라이버 뒷 꼭지까지 빠지네요.. (4) |
김건우 |
2019-08 |
2743 |
0 |
2019-08
2743
1 김건우
|
99338 |
윈도우 10 가상데스크톱 이름 변경은 아직 지원되지 않는 거죠? |
무아 |
2020-06 |
2743 |
0 |
2020-06
2743
1 무아
|
99337 |
Colab에서 symbolic link에 대한 질문입니다. (6) |
영산회상 |
2021-02 |
2743 |
0 |
2021-02
2743
1 영산회상
|
99336 |
수퍼마이크로 보드 부팅 질문 드립니다. (7) |
태영파파 |
2023-12 |
2743 |
0 |
2023-12
2743
1 태영파파
|
99335 |
윈도우 10은 무료로 사용이 가능한가요 (16) |
김대평 |
2023-01 |
2743 |
0 |
2023-01
2743
1 김대평
|
99334 |
Dell 7510 노트북과 Lenovo 씽크패드 노트북 교환 하실분 계신가요? (3) |
박종대 |
2019-02 |
2744 |
0 |
2019-02
2744
1 박종대
|
99333 |
쿨링팬에 포텐셔미터(가변저항기) 연결 질문 드립니다. (16) |
syhj |
2022-11 |
2744 |
0 |
2022-11
2744
1 syhj
|
99332 |
램소켓 명칭 문의 (6) |
땅부자 |
2019-12 |
2744 |
0 |
2019-12
2744
1 땅부자
|
99331 |
헤드폰앰프 어댑터 꼽는부분만 교체하려고합니다 (초보) (8) |
나나나나나 |
2020-05 |
2744 |
0 |
2020-05
2744
1 나나나나나
|
99330 |
조립형 서버 오래된 구형은 버리는게 편하겠죠? (22) |
재화 |
2019-07 |
2744 |
1 |
2019-07
2744
1 재화
|
99329 |
Microserver Gen8 윈도우10 깔고 동영상 재생 원활한가요? (7) |
미친감자 |
2021-08 |
2744 |
0 |
2021-08
2744
1 미친감자
|
99328 |
110블럭 칩 재활용 안하는게 좋습니다. |
박주연 |
2020-02 |
2744 |
0 |
2020-02
2744
1 박주연
|
- 네 일부는 맞습니다.
DBA가 없는 경우로 개발되는 경우도 많고, 개발, 개선이 계속 진행되면서 변경 사항이 많기 때문에
(도메인 분석이 잘못 되는 경우, 현업의 수준과 개발자가 아직 업무 파악에 미숙한 경우, 사업 및 업무가 계속 변경되는 경우 등등)
NULL 값을 포함하거나 필드값을 여유 있게 만들어 두고 사용합니다.
운영중에 DB 필드를 추가하는게 더 리스크 합니다.
저는 정규화 되면 많은 이점이 있다고 봅니다.
그런데 프로그램 하는 입장에서는 불편한 Join등을 해야해서 싫어 합니다.
조직에 DA가 있는 경우도 적고
프로젝트가 시일이 촉박하게 진행되어
표준이 무시되는 경우도 많아서 그렇습니다.
최초 개발시 정규화는 필수지만 유지보수중엔 왠만하면 추가로 정규화 하진 않네요.
NULL은 피해야 하지만 주로 소스에서 해결합니다.
이유는 NULL 과 문자열 조합과 연산이 불가능하고 문자를 다루는 함수에서 에러가 나는것이 주요 이유인데요.
그런데 DB에서 가져오는 모든 부분에 NULL을 블랭크로 변환해서 변수에 담는 함수를 사용하면 문제가 사라져서 자연스레 DB에선 피할 필요가 없게 되네요.
NULL이 많으면 DB 성능이 낮아진다지만 사실 가로 폭이 늘어날 수록 속도가 많이 느려집니다.
그래서 NULL을 제거하면서 가로 폭을 줄이려는 것인데 여러 소스에서 해당 컬럼을 호출하는 상황에 이를 일일이 변경하는 업무량이 너무나 많아서 컬럼을 늘리는 것으로 끝냅니다.
교집합과 합집합의 관계에서 반복을 제거하면서 공통값으로(키) 연결하는것이 필수지만 너무 빈번하게 Join 하면 그냥 1개 테이블로 합치는것도 자주 합니다.
결국 속도가 더 빠르기도 해서요.
개발자 PC에서 여러번 테스트하는 속도는 무의미합니다. 이미 DB캐시에 들어가 버려서요.
여러 유저들이 여러 레코드를 호출과 조인하는 상황에서 프로파일러로 지켜보며 튜닝하면 결국엔 1개 테이블이 빠를때도 종종 있습니다.
1-3차 정규화에 BCNF 까지 해도 궁극적으론 속도와 안정성을 위한 것인데 요즘엔 서드파티 라이블러리가 많이 도와줘서 DB는 단순화 하는게 유행이더라구요.
그래도 저는 꿋꿋이 조인과 그룹바이를 많이 사용합니다. 평상시엔 모르지만 사고 터지면 원인 찾는것과 복구가 훨씬 수월하니까요.
실무에서 DB는 대부분 PK와 FK 관계를 맺게됩니다. 즉 관계를 맺는 PK는 null이 존재하면 안되는건데(데이터 정합성위반) 아마 위 설명을 뒷받침 해주고 있습니다.
null은 없어도 크게 성능상이나 기타 문제가 되지는 않으나 관계형일때는 반드시 필수조건을 만족해야 됩니다.
흠 학교다닐때 잘 가르켜준거 같네요.