I believe there are two possible approaches:
1. A single transaction record, with fields for:
* cDebitAmount (Calculation; = -CreditAmount)
This is easy to implement - but you cannot produce a report for more that one account at a time.
2. The second approach is more or less what you described, except the amount goes into the parent transaction record; the two child records hold only the AccountID and the type (credit or debit). Note that this assumes EXACTLY two accounts per transaction.
Thanks very much. Option 2 — In my case, I can, and do, have many transactions which have more than two line items (aka compound entries, e.g., record a paycheck on which many amounts affect many different types of accounts like deductions, taxes, etc.), so I think the Amount field would need to stay in the TransLineItems table, since each line item will have a different amount.
I suppose one can go too far with normalization, especially since, again in my case, the number of accounts and contacts I will be using on any given transaction (i.e., the number of records in the Accounts table or Contacts table) will remain the same and I'm sure not going to be adding many new records for these in the future.
Thanks again very much. This is a great learning experience for me and you have been most helpful and given me more ideas to consider in the future.