2012-02-28 1 views
0

저는 은행 거래 테이블을 만드는 가장 좋은 방법이 무엇인지 궁금합니다.은행 거래 테이블 - 더 잘 할 수 있습니까?

그 사용자는 많은 계정을 가질 수 있으므로 UserID 대신 AccountID을 추가하지만 다른 외국 계정의 이름을 어떻게 지정합니까? 그리고 그것이 들어오고 나가는 거래인지 어떻게 알 수 있습니까? 여기에 예제가 있지만 더 잘할 수 있다고 생각하므로 조언을 구합니다.

예제에서는 모든 트랜잭션을 하나의 테이블에 저장하고 bool isOutgoing을 추가합니다. 따라서 true으로 설정하면 사용자가 ForeignAccount으로 돈을 보냈습니다. false이면 ForeignAccount이 사용자에게 송금되었음을 압니다.

내 예를

enter image description here

이 물론, 실제 은행 아님을 유의하시기 바랍니다. 나는 물건을 시험해보고 모범 사례를 고안하고 있습니다.

+0

외국 계좌 열에는 무엇을 기대합니까? – Diego

+0

한 가지는, 나라면 나에게 별도의 테이블로 들어오고 나가는 것이 었습니다. 당신은 $ 200k를 얻는 사람과 $ 200k를 잃는 사람 사이의 차이가 당신이 그'bit' 필드에서 들어오고 나가는 것을 기억하고 있는지를 기억하고 있는지를 원하지 않는다. – JNK

답변

0

내 의견 :

  • ID가 널이 아니게, ID (1,1) 및 기본 키
  • UserAccountID가 정상입니다. 계정 테이블에 FK를 만드는 것을 잊지 마십시오.
  • 모든 트랜잭션이 2 개의 계정 사이에 있고 두 계정이 모두 조직 내부에있는 경우 정수가 될 수도 있습니다.
  • Nvarchar 필드를 필요하지 않으면 만들지 마십시오 (두 배의 공간을 차지함) 만들고 만들지 마십시오 900을 초과하는 문자가 필요하면 varchar (max)를 사용하십시오. 열이 900보다 작 으면 색인을 만들 수 있기 때문에
  • datetime 열을 기본 getdate()로 만들 수 없다면 만들 수 있습니다. 실제 날짜와 다른 날짜의 거래; 열 이름은 분명하지만 (잘못이 설정할 수있는 삽입/업데이트에 대한 너무 쉽게 -
  • 금액하지
+0

거래가 내부 거래가 아니므로 무엇을 권하고 싶습니까? 그대로 놔둬? 다른 제안을 주셔서 감사합니다, 그것을 몰랐습니다. – sed

+0

그건 그렇고, 나는'Default Value or Binding' 필드에 getdate()를 사용합니까? – sed

+1

'amount'는 실제로'Money' 여야합니다 ... 나는''foreignaccount''에 대해''Nvarchar''를 외국어로 원한다고 추측합니다. 그 스위스 인들은 Ümautaut를 자신의 계좌 등에 넣을 수 있습니다. '이유 '와 같은 거래 - 거기에 외국 캐릭터 세트를 넣어야 할 수도 있습니다. – JNK

0

나는

당신은 가입 테이블을 통해이 작업을 수행 (계정 소유자가 여러 명있을 수 있습니다, 소유자 대해 여러 개의 계정을 가질 수 있습니다) 당신이 많은 tomany 관계를 처리하는 방법입니다 무엇을 찾고 생각합니다. 따라서 계정에 필요한 모든 세부 사항을 설명하는 계정이 있으면 사용자에게 필요한 모든 세부 정보가있는 사용자가 있으며 다른 두 테이블의 ID 만 포함하는 계정 USer를 갖게됩니다.

1

일반적으로 나는 DEBIT 또는 CREDIT를 계정에 반영하고 발신은 반영하지 않을 것입니다. 한 직불을 보여주는 및 신용 당신이 정말로 원한다면, 당신은이 두 가지를 연결 수에 대한 한 -

여기
ACCOUNT 
------- 
account_id 
account_no 
account_type 

OWNER 
------- 
owner_id 
name 
other_info 

ACCOUNT_OWNER 
-------------- 
account_id 
owner_id 

TRANSACTION 
------------ 
transaction_id 
account_id 
transaction_type 
amount 
transaction_date 

당신이 거래에이 개 기록을 얻을 것입니다 :

아마 여러 테이블이 같은있다 다른 테이블의 거래

TRANSACTION_LINK 
---------------- 
transaction_id1 
transaction_id2 
+0

나는 클라이언트가 다른 은행으로부터 지불을받을 수 있기 때문에이 방법이 효과가 없을 것이라고 생각한다. 즉,이 경우 데이터베이스가 내 데이터베이스 – sed

+0

에 등록되지 않아도된다. 단지 하나의 트랜잭션 만 갖는다. 현금 예금과 동일합니다. – Randy

+0

예.하지만 보낸 사람의 계좌 번호를 저장하여 돈을 받았음을 표시해야하는 경우 어떻게해야합니까? 어느 경우이든 – sed

1

내가 isOutgoing 플래그에 대한 의견에 동의 것 정수, 숫자이어야한다 , 열로 간과 될 수 있으므로 기본값으로 설정).

트랜잭션 테이블에 대한 또 다른 접근 방식의 라인을 따라 수 :

TransactionID (unique key) 
    OwnerID 
    FromAccount 
    ToAccount 
    TransactionDate 
    Amount 

은 또한 당신이 "에는 LocalAccount"과 "ForeignAccount"및 금액 필드의 부호를 가질 수는 방향을 나타냅니다.

그런 다음 다음과 같은 열이 여러 통화를 포함하는 트랜잭션을 수행하는 경우는/필요 간주 될 수

Currency 
    AmountInBaseCcy 
    FxRate 

경우 중 하나는 공통 CCY에 CCY 조합 당 환율 /에 갖고 싶어 다음 여러 통화를 포함 거래 당 날짜 또는 상점 - 계산 방법에 따라 다름

+0

예, 소유자 ID별로 사용자 트랜잭션 데이터를 얻을 수 있으므로이 옵션이 있습니다. – sed

관련 문제