웹개발 및 최신 테크 소식을 전하는 블로그, 웹이즈프리

HOME > webdevetc

리스트의 순서를 변경하는 효과적인 데이터베이스 설계 방법

Last Modified : 2017-02-01 / Created : 2017-02-01
9,246
View Count
Webisfree에는 다양한 메뉴가 존재하고 있다. 간단하게 HTML, CSS, Javascript 마지막으로 PHP의 카테고리가 존재한다고 생각해보자.

이 메뉴들이 보여지는 순서를 만약 관리자가 직접 변경하는 것이 가능하다면? 또한 이렇게 구현하기 위한 방법으로 데이터베이스의 구조에 대하여 어떤 설계가 필요할지 논의해보고자 한다. 예를들어 ... 아래의 A는 B가 되고 싶다.



< A >
1. PHP
2. HTML API
3. Javascript

< B >
1. HTML
2. PHP
3. Javascript


일반적으로 생성시점... 날짜에 따라 순서가 정해질 것이다. 또는 문자의 오름 및 내림차순으로 정렬할 수도 있다. 하지만 뭔가 더 중요하다고 판단되는 것이 위에 나오게 하기 위한 방법이 기획자의 의도라면?



# 순서를 정하기 위한 데이터베이스 설계

곰곰히 생각해보면 아래와 같은 방법들이 존재할 것이다.

i. order의 값으로 소숫점을 사용하는 방법

ii. 값으로 일정한 간격을 여유로 비워두는 방법
iii. 다음에 올 아이템의 아이디를 저장하는 방법

위 세가지 방법이 많이 쓰이면서 유용한 방법이다... 물론 이 방법 외에 여러가지 방법을 생각할 수도 있겠지만 우리는 최대한 서버에 부하가 없도록 아래의 조건을 충족해야한다.

a. 가능한 짧은 시간의 쿼리 index를 사용할 것
b. 데이터를 불러올 경우 역시 적은 호출만으로 가능할 것


이 두가지를 고려했을때 위 세가지 방법은 어느 정도 원하는 수준을 만족하는 방법들이라 생각한다. 이 중에서도 장점과 단점이 있으므로 어떤 케이스이냐에 따라 결정할 수 있으나 장단점을 따져보자면 아래와 같다.


i. 소숫점 또는 일정한 간격을 사용한 방법 - 하나의 레코드만 변경하므로 가장 부하가 적음

ii.  다음에 올 아이템의 아이디를 저장하는 방법 - 해당 아이템과 이 아이템의 이전 아이템의 레코드만 변경하면 됨. 일련된 정수로 표현이 가능함

>> 위의 ii 방법의 테이블 모습
========================
id     ||   name           ||   next
---------------------------------------
1      ||   php             ||   2
2      ||   HTML          ||   3
3      ||   Javascript   ||   null
========================

여기까지 보면 세번째 방법(다음에 오는 아이템의 아이디 저장)이 크게 무리하지 않으면서 적절한 퍼포먼스를 보여줄 것으로 기대할 수 있다.


끝으로 관계형 데이터베이스가 아닌 NoSQL이라면 클라이언트에서 원하는 순서대로 보내는 방법이 가능할 것이기 때문에 큰 고민이 되지 않을 수 있다. 하지만 DBMS 방식의 DB를 설계할 경우 어떤 방법을 가지고 설계하는 것이 매우 큰 요소가 될 것이다.

Previous

git 리모트 및 브랜치 삭제 추가 제거 업데이트 방법

Previous

Git에 commit 메시지를 다시 수정하는 방법