전체 코멘트
4
개
로딩 중입니다
행복에는 덕이면 충분하다안티스테네스

학교 동아리 명단을 공책 한 장에 몰아서 적는다고 생각해 봐요. 한 줄에 학생 이름, 전화번호, 그리고 동아리 이름, 동아리 담당 선생님까지 전부 적는 거예요. 처음엔 편해요. 한 줄만 보면 그 학생에 대한 모든 게 한눈에 보이니까요.
그런데 이 공책이 슬슬 말썽을 부리기 시작해요. 같은 동아리에 든 학생이 20명이면, 담당 선생님 이름을 똑같이 20번 적어야 해요. 선생님이 바뀌면 그 20줄을 전부 고쳐야 하고, 한 줄이라도 빠뜨리면 같은 동아리인데 선생님이 두 명인 이상한 명단이 돼요.
데이터베이스도 똑같아요. 정보를 한 표에 욕심껏 몰아 담으면 바로 이런 골칫거리가 생겨요. 정보처리기사 시험에서는 이 골칫거리를 '이상현상'이라고 불러요. 표를 잘못 만들면 생기는 부작용이라는 뜻이에요.

이상현상은 크게 세 가지로 나뉘어요.
첫째는 '수정 이상'이에요. 방금 본 선생님 이야기예요. 같은 값이 여러 줄에 흩어져 있으면, 하나를 고칠 때 그게 적힌 줄을 전부 고쳐야 하고, 한 줄이라도 빠뜨리면 한 표 안에서 서로 다른 답이 생겨요. 같은 동아리인데 담당 선생님이 둘로 갈리는 식이죠.
둘째는 '삭제 이상'이에요. 어떤 동아리에 학생이 딱 한 명 남았는데, 그 학생이 동아리를 그만뒀어요. 그 줄을 지우면 학생만 사라지는 게 아니라 그 동아리와 담당 선생님 정보까지 통째로 사라져요. 지우고 싶지 않은 것까지 같이 휩쓸려 나가는 거예요.
셋째는 '삽입 이상'이에요. 새 동아리가 막 만들어졌는데 아직 가입한 학생이 한 명도 없어요. 그런데 이 표는 한 줄에 학생이 꼭 있어야 하니, 학생이 없으면 동아리를 적어 넣을 자리가 없어요. 넣고 싶은데 못 넣는 거예요.
세 가지 말썽 모두, 성격이 다른 정보를 한 표에 억지로 묶어서 생긴 일이에요.

해결책은 의외로 단순해요. 한 표에 다 넣지 말고, 성격이 다른 정보끼리 표를 나누는 거예요. 이렇게 표를 잘게 나눠서 말썽을 줄이는 정리법을 '정규화'라고 불러요.
아까 그 명단을 두 개로 나눠 볼게요. 하나는 '학생 표'예요. 학생 이름, 전화번호, 그리고 어느 동아리에 속하는지만 적어요. 다른 하나는 '동아리 표'예요. 동아리 이름과 담당 선생님만 적고요.
이제 담당 선생님이 바뀌면 '동아리 표'에서 딱 한 줄만 고치면 끝이에요. 학생이 다 빠져나가도 '동아리 표'에는 동아리가 그대로 남아 있어요. 가입한 학생이 없는 새 동아리도 '동아리 표'에 먼저 적어 둘 수 있고요. 세 가지 말썽이 한꺼번에 풀려요.

정규화는 이걸 한 번에 하지 않고 단계별로 해요. 1단계, 2단계, 3단계처럼 차근차근 표를 더 깔끔하게 다듬어 가요.
1단계에서는 한 칸에 한 값만 넣어요. 전화번호 칸에 번호 두 개를 쉼표로 욱여넣지 않고, 한 칸에는 딱 하나만 적는 거예요. 2단계에서는 어떤 칸에만 딸린 정보를 따로 빼내요. 3단계에서는 학생을 거쳐서 간접적으로 딸려 온 정보, 예를 들어 동아리를 알면 따라오는 담당 선생님 같은 걸 제 주인 표로 옮겨요. 시험에서는 흔히 이 제3정규형까지를 기본으로 봐요.
규칙은 결국 한 문장이에요. 딸린 정보는 제 주인이 있는 표에만 적자. 학생에게 딸린 건 학생 표에, 동아리에게 딸린 건 동아리 표에 두는 거예요.

표를 나누면 당장은 번거로워 보여요. 학생 한 명을 제대로 보려고 표 두 개를 짝지어 맞춰 봐야 하니까요. 그런데도 나누는 이유는, 정보가 한 군데에만 있게 만들기 위해서예요.
같은 값이 한 곳에만 있으면, 고칠 때 한 번만 고치면 되고, 표 안에서 답이 서로 어긋날 일이 없어요. 이걸 어려운 말로 '데이터 일관성'이라고 해요. 동아리 담당 선생님이 줄마다 다르게 적히는 일이 사라지는 거예요.
물론 항상 끝까지 나누는 게 정답은 아니에요. 너무 잘게 나누면 표를 매번 짝지어 보느라 느려질 수 있어서, 일부러 덜 나누기도 해요. 이걸 '반정규화'라고 불러요. 정규화가 기본기라면, 반정규화는 속도가 급할 때 쓰는 예외예요.

정보를 한 표에 욕심껏 몰아 담으면 수정, 삭제, 삽입에서 말썽이 생기는데, 이게 이상현상이에요. 정규화는 성격이 다른 정보끼리 표를 나눠서, 같은 값이 한 곳에만 있게 만드는 정리법이고요. 핵심은 단순해요. 한 표에는 한 가지 생각만 담는 거예요. 그러면 고칠 때도 한 번이면 되고, 지울 때도 안심이고, 새로 넣을 때도 자유로워져요.
4
개