데이터베이스를 설계할 때 딱 1가지만 기억하면 된다.
중복 없애기
이게 무슨 말인지 아래 예시로 알아보자.
users (사용자)
id | 이름 |
---|---|
1 | 박재성 |
2 | 김유찬 |
posts(게시글)
id | 제목 | 내용 | 작성자 |
---|---|---|---|
1 | [속보] 개발자 채용 확대 | 내용1 | 박재성 |
2 | 취업 꿀팁 공유합니다! | 내용2 | 박재성 |
… | … | … | … |
132 | 어제 면접 보고 온 썰 | 내용3 | 박재성 |
위의 표와 같이 게시글 데이터가 DB에 많이 쌓여있다고 가정하자. 여기서 박재성
이 쓴 게시글이 3개가 있다고 하자. 그러다 어느 날 박재성
이라는 사람이 박지성
으로 개명을 했다. 그래서 게시글에 작성된 작성자의 이름도 전부 박재성
에서 박지성
으로 고쳐주어야 한다. 그럼 위 게시글의 모든 데이터를 뒤져서 박재성
이라는 이름을 전부 찾아서 박지성
으로 고쳐야 한다.
users (사용자)
id | 이름 |
---|---|
1 | 박지성 |
2 | 김유찬 |
posts(게시글)
id | 제목 | 내용 | 작성자 |
---|---|---|---|
1 | [속보] 개발자 채용 확대 | 내용1 | 박지성 |
2 | 취업 꿀팁 공유합니다! | 내용2 | 박지성 |
… | … | … | … |
132 | 어제 면접 보고 온 썰 | 내용3 | 박재성 |
그런데 위 테이블에서 1, 2번 게시글의 작성자 이름만 고치고, 실수로 132번의 게시글을 안 고쳤다. 그러다 6개월 정도가 지난 후 132번 게시글에 신고가 들어왔다. 그런데 데이터베이스에서 작성자 이름인 박재성
이라는 사용자를 암만 뒤져도 안 나오는 것이다. 즉, 데이터가 꼬여버린 것이다.
이런 문제가 발생한 가장 근본적인 이유는 데이터 중복 때문이다. 중복되는 데이터가 많으면 많을수로 무언가를 수정할 때 중복되는 모든 데이터를 찾아서 고쳐야 한다. 이 때, 실수로 중복된 데이터를 누락해서 수정을 하지 않는 경우가 발생하고, 이렇게 되면 데이터들 사이에 모순이 생겨버린다.
저장된 데이터들 중에서 모순되는 상황이 생긴 현상을 보고 **이상현상(Anomaly)**라고 얘기한다. 위의 경우는 이상현상(Anomaly) 중 **갱신 이상(Update Anomaly)**에 해당한다. DB 설계 할 때 이 용어는 하나도 중요하지 않으니 눈으로 보고만 넘어가자.