In my previous post, I showed the database schema and the UI and asked what was wrong with that. Before we move on, here is what I showed.
If you looked carefully, you might have noticed that there are duplicate PO# and Tracking# in the UI. More than that, we somehow double charged the customer for shipping.
What is going on?
It is actually fairly obvious, when you think about it. Look at the schema, there isn’t actually any association between the Tracking # and the PO #. In most orders, we have only 1 PO #, so it was easy to just add this information by just pulling it from the DB and adding a few columns. But when we got an order that has multiple POs… that is when all hell breaks lose.
This is a classic Cartesian Product problem.
The solution? Actually model the UI to avoid suggesting that there is a relationship between the tracking and purchase orders, like this: