많은 도움 받고 있습니다.
감사합니다.
포인트 충전 및 사용시 제가 생각한 방법은 두가지 있습니다.
첫번째 방법
1. 포인트 충전시 유저테이블 point필드 update
- insert into users(userid, point)
values(1, 1000)
2. 포인트 사용(차감)시 유저테이블 point 필드 update
- update users
set point = (point - 100)
where userid = 1
- 현재 유저가 사용할수 있는지 판단은 select
select @point = point
from users
where userid = 1
if(@point < 100)
return 포인트가 부족합니다.
두번째 방법
1. 포인트 충전시 포인트 충전 테이블 insert
- insert into pointcharge(userid, point)
values(1, 1000)
2. 포인트 사용(차감)시 포인트 사용 테이블 insert(2번 사용(차감)했음)
- insert into usepoint(userid, point)
values(1, 100)
- insert into usepoint(userid, point)
values(1, 100)
select @chargepoint = sum(point)
from pointcharge
where userid = 1
select @usepoint = sum(point)
from usepoint
where userid = 1
set @remainpoint = (@chargepoint - @usepoint)
if(@remainpoint < 100)
return 포인트가 부족합니다.
첫번째 방법이 더 직관적이여서 사용중 입니다.
users테이블을 자주사용하는지라 두번째 방법을 생각해본건데
성능향상에 도움이 될런지요
혹시 두번째 방법으로 했을때 더 이점이 있는지요(장단점)
감사합니다.
첫번째 방법은 프로그래밍 하기에 쉬운 형태입니다,,
다만 적립, 사용 로그를 따로 쌓지 않으면 포인트를 언제 쌓았는지 언제 사용했는지 알수 없으며,
적립한 포인트의 만료기간을 산정하기 어렵습니다,,
두번째 방법은 첫번째 방법의 단점을 커버하지만, 차감하는 로직이 비교적 어려워 집니다,,
쉽게 처리하려면 커서를 이용해서 과거에 적립했던 포인트부터 순차적으로 차감할 수 있겠지요,,
물론 한번 쿼리로 차감도 가능합니다만, 복잡도가 상승하겠네요,,,
아, 두번째 방법도 사용에 대한 로그는 별도로 기록해야 논란이 생겼을 때 대응하기 쉬워지겠죠,,,,