Таблица банковских операций - это можно сделать лучше? - PullRequest
1 голос
/ 28 февраля 2012

Мне интересно, как лучше составить таблицу банковских транзакций.

Я знаю, что у пользователя может быть много учетных записей, поэтому я добавляю AccountID вместо UserID, но как мне назвать другую, чужую учетную запись. И как мне узнать, является ли это входящей или исходящей транзакцией. У меня есть пример, но я думаю, что это можно сделать лучше, поэтому я прошу вашего совета.

В моем примере я храню все транзакции в одной таблице и добавляю bool isOutgoing. Поэтому, если он установлен на true, то я знаю, что пользователь отправил деньги на ForeignAccount, если это false, тогда я знаю, что ForeignAccount отправил деньги пользователю.

Мой пример

enter image description here

Обратите внимание, что это не для реального банка, конечно. Я просто пробую вещи и разрабатываю лучшие практики.

Ответы [ 4 ]

1 голос
/ 29 февраля 2012

Я бы согласился с комментарием о флаге isOutgoing - его слишком просто для вставки / обновления, чтобы неправильно установить его (хотя имя столбца ясно, как столбец, его можно пропустить и, следовательно, установить назначение по умолчанию).

Другой подход к таблице транзакций может быть следующим:

  TransactionID (unique key)   
  OwnerID   
  FromAccount  
  ToAccount  
  TransactionDate  
  Amount  

В качестве альтернативы вы можете иметь «LocalAccount» и «ForeignAccount» и знакПоле Amount представляет направление.

Если вы проводите транзакции с несколькими валютами, то вам потребуются / будут рассмотрены следующие столбцы

  Currency  
  AmountInBaseCcy  
  FxRate  

Если вы используете несколько валют, то вы либо хотите иметь валютуставка за комбинацию ccy / на общую сумму ccy на дату или сохранение ее за транзакцию - это зависит от того, как она будет рассчитываться

1 голос
/ 28 февраля 2012

обычно, я думаю, вы увидите столбец, отражающий ДЕБЕТ, или КРЕДИТ на счет, а не исходящий.

, вероятно, есть несколько таблиц примерно таких:

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

здесь вы получите 2 записи для транзакций - одну для дебета и одну для кредита если вы действительно хотите, вы можете связать эти две транзакции в другой таблице

TRANSACTION_LINK
----------------
transaction_id1
transaction_id2
1 голос
/ 28 февраля 2012

Мое мнение:

  • сделать идентификатор не нулевым, Identity (1,1) и первичный ключ
  • UserAccountID в порядке.Не забудьте создать FK для таблицы «Счета»;
  • Можно также сделать ForeignAccount целым числом, если каждая транзакция между двумя учетными записями и обе учетные записи являются внутренними для организации
  • Не создаватьПоля Nvarchar, если это необходимо (занимают вдвое больше места), и не создавайте их 1024. Если вам нужно более 900 символов, используйте varchar (max), потому что если столбец меньше 900, вы все равно можете создать индекс для него
  • создавать столбцы даты и времени как getdate () по умолчанию, если только вы не можете создавать транзакции в другую дату, отличную от фактической даты;
  • Сумма должна быть числовой, а не целой
0 голосов
/ 28 февраля 2012

Я думаю, что вы ищете, как управлять отношениями с несколькими мужчинами (учетные записи могут иметь несколько владельцев, владельцы могут иметь несколько учетных записей)

Вы делаете это через соединительный стол. Таким образом, у вас есть учетная запись со всеми реквизитами, необходимыми для учетной записи, у вас есть пользователь со всеми необходимыми для пользователя данными, а затем у вас есть пользователь USER, который содержит только идентификаторы из двух других таблиц.

...