If you have values which only is dependent on a number of other fields +/- constants (say retail cost &lifier discount cost), is it more beneficial to keep individuals values too in order to calculate them "quickly" when locating the information?

The default isn't to keep redundant information: the third normal form is generally a sensible initial goal. Redundancy is introduced whenever a "adequateInch reason seems, like a "large enough" performance hit you are taking if you need to calculate a derived value and also the calculation is intensive.

Clearly, "adequateInch and "large enough" are qualifiers which only mean something inside a given context. For which it's worth, the retail/discount cost calculation appears too cheap and straightforward too do in order to warrant the development of a redundant column in many (clearly not every) cases.

I'd accept Tomislav - avoid redundancy since you can finish track of data on multiple tables disagreeing with one another. It can make updates more painful.

You will find exceptions which are worth thinking about, though, that aren't associated with database performance.

  • If this painful to calculate the worthiness (e.g. some complex mathematical function), then it seems sensible to keep (you can think of the column because the 'last calculated value').
  • You may have inputs that change with time, e.g. fee comes from a fee rate, however the fee minute rates are saved like a single value inside a configuration table. You might like to record the charge because historic costs would simply be calculated in the current fee rate. Alternatively, you may keep rate by time too to circumvent this issue.
  • When the derived value could be overriden by user input as well as other process, on the other hand it seems sensible to keep. Alternatively, you may model this with two states 'CALCULATED' and 'OVERRIDDEN', to ensure that you simply store something within the latter condition.