It's not an uncommon business requirement that once data has been entered into the
database. It could be as harsh as once written, never change. This would be true for an
audit table for instance. It could also be that the data is permitted to change in some
initial phase, but after a certain event data is unchangeable. For instance, once an
order has been shipped, it cannot be changed.
Such constraints can be enforced with triggers, but writing triggers is a fairly complex
and tedious affair. Since these sort of requirements are quite common, it would
desirable to express in a declarative form. Actually, when I think of the system I
work with, we probably have a whole bunch of columns that we cannot permit
to change, but we don't enforce this in triggers. We just naïvely assume that
it doesn't happen.