Common Properties: Consolidating Loan, Purchase, Inventory and Sale tables into one Transaction tabl

Posted by Frank Computer on Stack Overflow See other posts from Stack Overflow or by Frank Computer
Published on 2010-06-16T23:48:04Z Indexed on 2010/06/16 23:52 UTC
Read the original article Hit count: 158

Filed under:

Pawnshop Application:

I have separate tables for Loan, Purchase, Inventory & Sales transactions. Each tables rows are joined to their respective customer rows by:

customer.pk [serial] = loan.fk [integer]; 
                     = purchase.fk [integer]; 
                     = inventory.fk [integer]; 
                     = sale.fk [integer];  

Since there are so many common properties within the four tables, I consolidated the four tables into one table called "transaction", where a column:

transaction.trx_type char(1) {L=Loan, P=Purchase, I=Inventory, S=Sale}

Scenario:

A customer initially pawns merchandise, makes a couple of interest payments, then decides he wants to sell the merchandise to the pawnshop, who then places merchandise in Inventory and eventually sells it to another customer.

I designed a generic transaction table where for example:

transaction.main_amount DECIMAL(7,2)

in a loan transaction holds the pawn amount, in a purchase holds the purchase price, in inventory and sale holds sale price.

This is clearly a denormalized design, but has made programming alot easier and improved performance. Any type of transaction can now be performed from within one screen, without the need to change to different tables.

© Stack Overflow or respective owner

Related posts about database-design