dukDukz

[블록체인] 프로젝트 DB 스키마 본문

웹 개발/블록체인

[블록체인] 프로젝트 DB 스키마

헤일리_HJ 2021. 9. 28. 16:21



매수 : 사는 것

매도 : 파는 것

 

# DB 스키마

테이블 종류

 

1. order table

buy / sell



2. assetsbalance table

현금에 대한 입출력 list

 

거래라는것은 기본적으로 2개가 있어야 한다.

돈 과 물건

혹은 물건과 물건이 교환되는 것.

 

거래소는 현금과 코인의 거래가 이루어진다.

 

현금을 갖고 있는지 파악하기 위해서 현금 입출력 내역을 저장하는 테이블이 필요하다.

총 남은 금액이 현금 자산..

 

코인 같은 경우에는 내가 보낸거와 받는거 총 합 구해서 

나온 결과가 내가 최종으로 갖고 있는 코인이 된다.

 

남은 현금

 

내가 지금 1000만원이 있다.

비트코인을 사려고한다면.

현재 비트코인 가격 6천 

내가 매수하려 한다면 총 걸 수 있는 매수량은 0.167

1천만원은 매수 예약 걸었으면 내 현금 자산은 쓸 수 없게 된다.

 

남은 현금 = 1000만원 - order = 사용 가능 금액




3. transaction table

buy 0.167

sell 0.167

2번 사람이 0.167 만큼 사겠다 하면

 

시간 기준으로 가장 오래된거가 제일 먼저 팔리게 됨 => 거래완료

 

그럼 이 거래 완료 된거는 또 트렌젝션 테이블에 저장이 되어야 한다.

그래서 order table 에서 거래가 사라지게 된다.





이 정도만 만들어도 스키마 굿임.

 

# DB 테이블 정리

* User *
userid
username
userpw

* Order *
pk  (하나의 거래의 키 값)
userid
price   (어떤 가격에 진행?)
qty     (수량)
ordertype (매수/매도 0/1 로 나눠서.)
active      (거래 전에는 0이고 거래 완료되면 1로 바뀜)

어떤 가격에 매수/매도를 얼만큼(수량) 걸었는지 구분하는 테이블

구분 값 : [매수/매도 | 가격 | 수량 | 거래처리결과]

 

코인종류는 하나로 한정함.




 

* asset *
pk (교유 키 값)
userid  (어떤 회원의 입출력인지?)

input (입금)
output (출금)

아니면 
price  (돈 거래)
flag (입/출금)
장점 : input output 에는 null 값이 있지만 얘는 없다.

regdate (입출력한 날짜)

 

[어떻게 할까?]

select sum(input),sum(output) from asset where group by userid

 

userid 별로 input output 의 합을 더해주게됨

 

혹은

select
    userid,
    sum(input),
    sum(output)
from asset
group by userid



혹은

select
    a.in - a.ou as price
    from(
        select
            userid,
            sum(input) as in,
            sum(output) as ou
        from asset
        group by userid
    ) as a
where userid='web7722'

 


 

* transaction *
a_orderid
a_amount
a_commision
b_orderid
b_amount
b_commision

판매자와 구매자가 둘 다 있어야만 트렌젝션이 일어난다.