|
(광고) 단통법 시대의 인터넷가입 가이드(ver2.0) (234) |
백메가 |
2015-12 |
1675905 |
25 |
2015-12
1675905
1 백메가
|
|
[필독] 처음 오시는 분을 위한 안내 (735) |
정은준1 |
2014-05 |
5141268 |
0 |
2014-05
5141268
1 정은준1
|
99347 |
DDR3 ECC/REG 메모리 불량 이슈 .. (8) |
죠슈아 |
2022-03 |
2743 |
0 |
2022-03
2743
1 죠슈아
|
99346 |
아.고수님들 이 노트북 버려야 되나요? (29) |
싱어송라이터 |
2024-05 |
2743 |
0 |
2024-05
2743
1 싱어송라이터
|
99345 |
[도움요청]레노버 530-8I RAID카드 부팅시 문제 (2) |
comduck |
2021-08 |
2743 |
0 |
2021-08
2743
1 comduck
|
99344 |
회전하는 드라이버 뒷 꼭지까지 빠지네요.. (4) |
김건우 |
2019-08 |
2743 |
0 |
2019-08
2743
1 김건우
|
99343 |
윈도우 10 가상데스크톱 이름 변경은 아직 지원되지 않는 거죠? |
무아 |
2020-06 |
2743 |
0 |
2020-06
2743
1 무아
|
99342 |
Colab에서 symbolic link에 대한 질문입니다. (6) |
영산회상 |
2021-02 |
2743 |
0 |
2021-02
2743
1 영산회상
|
99341 |
Rb450gx4 성능이 궁금합니다. (4) |
블랙펄 |
2021-04 |
2743 |
0 |
2021-04
2743
1 블랙펄
|
99340 |
U.3 SSD가 U.2 단자에 하위 호환되나요? (6) |
미친감자 |
2023-08 |
2743 |
0 |
2023-08
2743
1 미친감자
|
99339 |
램소켓 명칭 문의 (6) |
땅부자 |
2019-12 |
2744 |
0 |
2019-12
2744
1 땅부자
|
99338 |
Microserver Gen8 윈도우10 깔고 동영상 재생 원활한가요? (7) |
미친감자 |
2021-08 |
2744 |
0 |
2021-08
2744
1 미친감자
|
99337 |
110블럭 칩 재활용 안하는게 좋습니다. |
박주연 |
2020-02 |
2744 |
0 |
2020-02
2744
1 박주연
|
99336 |
블루투스는 스마트폰 DAC 음질과 전혀 관계 없나요??? (4) |
병맛폰 |
2020-06 |
2744 |
0 |
2020-06
2744
1 병맛폰
|
99335 |
맨 위에 램은 512 일까요? (4) |
신은왜 |
2020-11 |
2744 |
0 |
2020-11
2744
1 신은왜
|
99334 |
Smart Array P420 Controller 오류 문의드립니다 (4) |
stannum |
2020-11 |
2744 |
0 |
2020-11
2744
1 stannum
|
99333 |
아날로그 cctv카메라 하우징이 플라스틱이여도 잘버티나요?? (3) |
행복하세 |
2019-04 |
2744 |
0 |
2019-04
2744
1 행복하세
|
99332 |
ibm power 730 알람끄기 (2) |
winner712 |
2019-08 |
2744 |
0 |
2019-08
2744
1 winner712
|
99331 |
탄탈 콘덴서 읽는 법을 알고 싶습니다. (7) |
김진영JK |
2023-07 |
2744 |
0 |
2023-07
2744
1 김진영JK
|
99330 |
DISKPART로 SSD 파티션이 지워지지 않는 경우는 SSD가 고장 난 건가요? (15) |
초코송이 |
2022-07 |
2744 |
0 |
2022-07
2744
1 초코송이
|
99329 |
T440P 전원 입력하면 LCD화면 하단에 빛이 나타납니다. (1) |
백두산 |
2018-12 |
2744 |
0 |
2018-12
2744
1 백두산
|
99328 |
수퍼마이크로 보드 부팅 질문 드립니다. (7) |
태영파파 |
2023-12 |
2744 |
0 |
2023-12
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은 없어도 크게 성능상이나 기타 문제가 되지는 않으나 관계형일때는 반드시 필수조건을 만족해야 됩니다.
흠 학교다닐때 잘 가르켜준거 같네요.