SQLite has generated columns (also called expression columns) that are found in other DBMSes. But you'll need a fairly recent version of SQLite:
Generated column support was added with SQLite version 3.31.0
(2020-01-22). If an earlier version of SQLite attempts to read a
database file that contains a generated column in its schema, then
that earlier version will perceive the generated column syntax as an
error and will report that the database schema is corrupt.
Source: Generated Columns
You could simply build a view to augment your table a little bit.
You have mentioned that the prices will change over time and this is perfectly normal. So you have at least two design choices:
- add an additional table to store price history, in that table you store product ID, price, start date and end date (as an example). Then you join it with the other tables. The effective price shall be determined based on the order date. That also means that the prices are to be stored in that table and not in
products
... you have to redesign your schema slightly.
- the other option is to store the unit price of the product in the
sales
table as a historical value. This is the price that was in force when the sale was made.
One thing to consider: you may require more flexibility on pricing: it can depend on the client (different rates based on volume) and also on specific circumstances. The final price may be the result of numerous and complex calculations.