database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
ㆍOracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
Oracle Q&A 22012 게시물 읽기
No. 22012
포인트 적립 및 차감에 대한 아이디어를 부탁드리겠습니다.
작성자
김동주
작성일
2005-03-16 15:00
조회수
3,455

일단 로직을 설명 드리자면 jsp/java, 오라클 8i 환경에서

포인트를 적립 하고 차감 하는 프로세스를 만들어야 합니다.

포인트의 중요한 점은 선입선출이라는 점입니다.

그래서

첫번째, 쌓이는 포인트를 매일매일 돌면서 사용하지 않은 것 중에서 1개월이 지난 것을

찾아서 없애야 하구요

두번째, 포인트 조회시 사용하지 않은 포인트 중에 유효기간이 지나지 않은 것의 합을

가져와서 보여주어야 합니다.

 

가장 중요한 것은 1개월마다 전체 clear를 시키는 것이 아니라, 한줄 한줄 별로 체크를

해야 한다는 것이구요

두번째는 차감을 하게되면 그것도 하나의 row를 생성해서 유저에게 게시판 형식으로

쌓인 포인트와 차감된 포인트를 보여주어야 합니다. (실제 유효기간이 지난 포인트라

하더라도 포인트를 지워버리는것이 아니라, "유효기간 만료로 차감 " 이런 형식으로

한 row를 생성하고 그것을 사용한 것처럼 해야 한다는 거죠... )

이정도면 설명이 되었는지 모르겠네요... 암튼 한 일주일 이상 고민을 하다가 질문을

드립니다. 시간이 좀 없어서요...

 

정 안되면 테이블 구조를 새로 짜도 되는 것이니까, 부담없이 아이디어를 좀 주세요

부탁드립니다.

이 글에 대한 댓글이 총 3건 있습니다.

그냥 저의 짧은 소견을 적어 보았습니다. -.-;;

(아래: 간략한 테이블 구조)

       포인트 적립 테이블
      --------------------
       회원 아이디 -- pk
       시퀀스 번호 -- pk
       포인트 적립액
       포인트 적립일
       차감여부
       포인트 차감일


(crontab 이나 오라클 JOB 에 등록하여 매일매일 돌면서 차감하는 프로시져를 아래와 같이)

  select 회원 아이디, 시퀀스 번호, 적립일
  from 포인트 적립 테이블
  where 포인트 적립일 < (sysdate - 1달)
  and 차감여부 is null
  (위 쿼리에서 index 는 일단 고려하지 않았습니다. full scan 이 되겠죠.)

 

  를 cursor 에 담은후


  while 문이 돌면서

 

  update 포인트 적립 테이블
  set 차감여부 = 'Y',
      포인트 차감일 = sysdate
  where 회원 아이디 = ?
  and   시퀀스 번호 = ?

 

  이렇게 하면 1달 전에 등록된 것은 차감 되는 것이겠죠.

 

  해당 회원의 적립/차감에 대한 리스트는
  "포인트 적립 테이블" 을 select 하면 될 것 같은데요.


이상 짧은 소견이었습니다.

 

정확히 고민 하셨던 부분이 무엇인지 잘 몰라서 -.-;;
고민했던 다른 부분이 있다면, 댓글로 달아 주세요.
다시한번 함께 고민해 보겠습니다.

 

좋은 하루 되세요.

 

함현식(happyhaam)님이 2005-03-16 18:37에 작성한 댓글입니다.
이 댓글은 2005-03-16 18:39에 마지막으로 수정되었습니다.

함현식님의 조언 감사드립니다.

일단 저도 거기까지는 생각을 해봤는데요...

거기에서 가장 큰 문제는 뭐냐면요... job을 돌리는 것이 아니라요

일반적으로 사용할때의 문제입니다.

쌓이는 포인트는 1, 5, 10, 30 뭐 이런식으로 쌓입니다. (물론 관리자가 임의로 수정이 가능하구요)

 

사용하는 포인트는 30, 50, 100 이런식이 될겁니다....

 

여기서 문제는 스케줄을 돌때 이미 사용한 것은 차감하면 안되잖아요

 

그래서 일반적인 웹 활동에서 사용한 포인트를 구분 지어 주어야 하는데 그렇게 되면 가장 먼저 생각이 드는게, 만일 유저가 매일 1포인트 또는 5 포인트씩 얻어서 35포인트를 만들었을때(물론 랜덤하겠죠)

그때, 33포인트를 쓴다면 그 33포인트를 이미 적립된 것에서 합을 구해서 사용할 포인트가 있는지도 조회를 해야 겠고, 사용 가능한 포인트가 충분하다면 그중 33포인트를 차감했다는 액션을 주어야만 나중에 스케줄러가 2중으로 차감을 하지 않겠죠... 그걸 정확히 알고 싶다는 말씀을 드리는 겁니다. 예를 들어 1,1,1,1 .... 5, 1, 5, 1 이런식으로 쌓여 있을때 (1,1,1,1 .... 5, ) 이 괄호안 의 값이 35포인트라고 했을때, 5포인트가 가장 최근 포인트구요

33포인트를 차감하려면 1~1 을 30번체크한후 3을 차감하기 위해서는

5포인트 중에 3포인트만 사용했고, 2포인트가 남았다는 것을 알아야 하거든요... 그게 제일 고민입니다... 다른 것도 마찬가지지만요...

 

김동주님이 2005-03-17 14:58에 작성한 댓글입니다.
이 댓글은 2005-03-17 15:02에 마지막으로 수정되었습니다. Edit

도움이 못될것 같지만, 그냥 몇자 적어 보았습니다. -.-;;

 

위의 예시 테이블은 해당 회원의 총 적립액을 누적하는 것이 아니구요.
포인트가 적립될때 마다 해당 회원의 시퀀스 번호를 증가 시키면서
각각의 적립 포인트를 insert 하는 것입니다.

 

그리구, 포인트 차감액 column 을 추가해 보았습니다.

 

포인트 적립 테이블
--------------------
 회원 아이디 -- pk
 시퀀스 번호 -- pk
 포인트 적립액
 포인트 적립일
 포인트 차감액
 포인트 차감일
 차감구분 flag -- 포인트 사용으로 차감되었는지, 사용기간 만료인지,
                   포인트 사용후 남은 포인트가 사용기간 만료 되었는지
                   ... 등등을 구분하는 flag

 

해당 회원의 적립액이 1,1,1,1,1,...,5 이렇게 35포인트가 등록되어 있고,
33 포인트를 차감해야 한다면, 최근 데이타인 5포인트에서 3포인트를 차감해야 하는것이죠.

 

포인트 차감액 column 에 차감된 3포인트를 업데이트해 주면 될 거 같은데요.

 

예를 들어 abc 라는 회원의 포인트를 33 포인트 차감한후 select 해보면,

 

회원아이디     시퀀스번호     포인트 적립액     포인트 차감액
-----------   ------------   ---------------   ---------------
abc                      1                 1                 1
abc                      2                 1                 1
abc                      3                 1                 1
......

......
abc                     30                 1                 1
abc                     31                 5                 3

 

이렇게 되는 것입니다.

 

남은 포인트는 (적립액-차감액)을 하면 될 것 같습니다.

 

또한, abc 라는 회원이 다시 1 포인트를 사용하려고 한다면,
전에 33 포인트를 차감하고, 지금 1 포인트를 차감했음을 또 다른 table 에
기록해 놓아야 할 것 같습니다.

 

만약 위의 조회 리스트에서 abc 회원의 31번 시퀀스에서 적립액 5포인트에 대한
3포인트 차감과 1포인트 차감을 각각 구분하여 보여줘야 한다고 하면,
abc 회원의 각 시퀀스에 대한 차감액 정보 table을 따로 가지구 가야할 듯 합니다.

 

사용기간 만료된 포인트는 (적립액-차감액)이 0 보다 큰 데이타이고,
차감구분 flag 가 null 인 데이타를 조건으로 하여 차감구분 flag 를 set 해주면 될 것 같습니다.

 

이궁, 도움이 못되어 죄송합니다.

 

좋은 하루 되세요. ^^;;

함현식(happyhaam)님이 2005-03-18 10:32에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
22015import 쉘 스크립트 작성시 이상한점? [2]
이재영
2005-03-17
2381
22014CURRENT_TIMESTAMP에 대해서
홍길동
2005-03-16
1750
22013온라인 완전복구 도중 궁금? [1]
kjm
2005-03-16
1679
22012포인트 적립 및 차감에 대한 아이디어를 부탁드리겠습니다. [3]
김동주
2005-03-16
3455
22011JDBC Version 관하여 알고 싶습니다. [1]
짱장구
2005-03-16
1513
22010oracle bit 관련 [1]
손님
2005-03-16
1426
22009테이블 두개 조인하여 페이징 할 경우 문제가 생겼습니다. [1]
급질문
2005-03-16
2304
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.027초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다