디스 프로그래머 (This Programmer)

데이터베이스에는 절대적인 값이 들어가야 한다. 본문

소프트웨어 공학/Database

데이터베이스에는 절대적인 값이 들어가야 한다.

디스 프로그래머 2018. 10. 31. 22:50

이런 말로도 쓸 수 있겠다. 데이터베이스에 들어가는 값은 최대한 변하지 않는 값이어야 한다.

 

예를 들어서 어떤 플랫폼에서 나이를 다룬다고 하자. 그리고 사람들의 나이를 각 회원들의 열에 저장하였다. 생각만으로 머리가 아파지지 않는가?

 나이를 세는 기준은 무엇인가. 연도? 생일? 만약에 전자라면 해가 지날 때마다 모든 회원들의 나이데이터를 불러와서 1을 더한 다음에 다시 저장하는 과정을 거쳐야 한다. 만약에 후자라면 매일매일 날짜를 체크하여 회원의 생일이 지났는지를 검사하여 생일이 지났으면 해당 회원의 나이를 불러와서 1을 더한 다음에 다시 저장해야한다.

 이것도 아주 단적인 예만 말한 것이다. 만약에 회원이 외국인이라면? 혹은 나이를 세는 기준이 바뀐다면? 그도 그럴 것이 이 '나이'라는 것이 현대에 와서는 굉장히 모호한 개념이 됐기 때문에 굳이 회원의 데이터베이스에 나이를 저장하고 싶다면 고려해야할 것이 한두가지가 아니게 될 것이다.


그렇다면 해결방법은 뭘까?


데이터의 변경이 필요하지 않은 값을 데이터베이스에 넣은 뒤에 코드로 변경에 대처하는 것이다. 이 케이스에서는 생년월일이 될 수 있다. 만약 동양인이라면 음력과 양력에 대한 구분도 추가해주면 좋을 것이다.

 유저의 열에 생년월일을 추가하고 오늘날을 기준으로 나이를 도출하는 함수를 작성해놓는다면 해가 바뀔 때마다 유저의 데이터를 불러와서 변경한뒤에 저장하는 수고를 덜지 않아도 된다. 나이를 세는 기준이 바뀌더라도 해당 함수를 변경하면 되며 외국인이 자신의 나라 기준으로 나이를 설정하고 싶다는 요청을 해도 외국인에 대한 옵션을 따로 추가해주면 되지 데이터베이스에 있는 '생년월일'이라는 값은 변하지 않는다.


골자는 이렇다. 데이터베이스에는 최대한 차후 변경이 필요하지 않을 데이터만 저장한다. 변형된 값이나 해당 값들을 조회하여 얻을 수 있는 값들은 부하가 심하지 않는 이상은 코드로 구현한다. 전에 썼던 글인 쿼리로 구현하기 VS 코드로 구현하기와 어느정도 일맥상통한다고 보면 된다.

0 Comments
댓글쓰기 폼