I received fantastic help from Dave Costa and Justin Cave here (thanks again) in how to calculate a subtotal value from two other attributes, Quantity and Price (so Quantity * Price = Subtotal). In one of the answers it was stated that from a normalisation point of view it's not good to do this as the subtotal value can be derived from the other two attributes and that I should probably look at using a View. I've read up on Views and am getting the concept (I'll be using them elsewhere regardless) but I'm still not sure how to go about actually calculating the two values and show the result in a custom view. If anyone could point me in the right direction I'd appreciate it.
The current trigger (credit to Dave and Justin):
CREATE VIEW show_subtotal
AS SELECT price
FROM products
WHERE product_no =:new.product_no;
:new.subtotal := currentPrice * :new.quantity;
Something like this, for example, will compute the subtotal by joining the
order_line
andproduct
tables together just as the previous trigger was doing. Presumably, you'd want to include some additional attributes (i.e. the order number, the order line number, etc.)This has many of the same data consistency issues that the trigger-based solution had since the current price is being referenced from the
product
table rather than the then-current price being stored in theorder_line
table. If you changed the data model so that theorder_line
table stored the quantity and the current price, the view would get simpler because it would no longer need to join to theproduct
tableIf you are on 11g, you can also create a virtual column in your table definition,