> On 4 Feb 2025, at 22:41, Thiemo Kellner <thi...@gelassene-pferde.biz> wrote:
> 
> 04.02.2025 18:31:09 Michał Kłeczek <mic...@kleczek.org>:
> 
>> 
>>> On 4 Feb 2025, at 18:27, Thiemo Kellner <thi...@gelassene-pferde.biz> wrote:
>>> 
>>>  Unless the lookup table is actually a check constraint one can use to 
>>> populate dropdown boxes in an interface.
>> 
>> That is even worse because it ceases being transactional and users might 
>> select something different than what they see on the screen.
> 
> I might see what you want to point out. E.g. the table is COLOURS. The rec 
> with id 1 is RED, the one with id 2 is BLUE, 3 is GREE and so on. Now you 
> load these values into the dropdown box that sports RED, BLUE, GREE and so 
> on. While someone selects GREE, there is a maintenance release changing GREE 
> to YELLOW. So when that someone sends the selection by id to the backend, not 
> GREE is selected but YELLOW.
> 
> A) Your release changed the sementics of the record 3. It's meaning changed. 
> I cannot recommend doing that.

That’s what using natural keys and FK’s restricting their changes guarantee: no 
(accidental) changes to meaning of data.
Even with cascading updates you still have transactional semantics (ie. the 
user selects what’s on the screen or gets an error).

> B) If you absolutely must change the semantic, put your application into 
> maintenance mode in which noone can select anything beforehand.

All this error prone hassle and downtime can be avoided with natural keys and 
guarantees that DBMS gives you.

> 
> If the maintenance would just correct the typo from GREE to GREEN, nothing 
> would happen. Yor customer still ordered the lavishly green E-Bike her hear 
> ever desired.

The question is: how do you _ensure_ that?

—
Michal

Reply via email to