> On 5 Feb 2025, at 21:33, Thiemo Kellner <thi...@gelassene-pferde.biz> wrote:
> 
> 
> El 05-02-25 a las 13:55, Michał Kłeczek escribió:
>>> 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).
> Sorry, that is utter nonsense. You cannot ever guarantee an update does not 
> mess up the semantics on the updated field, change the meaning. Y

But you can guarantee that if you change the value of the key after the user 
displays it - the user will get an error on submission (whereas with the 
surrogate key it would happily proceed without user noticing).

> ou would need a check constraint which in it turn needs to get set up where 
> one can mess up things.
>>> 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.
> And I thought you would have denied the need of changing semantics above. And 
> no, changing your natural keys semantically ALWAYS requires downtime to make 
> sure you do not run into the race condition described above.

How so? The user is going to get FK violation - you do not need any downtime to 
make sure users don’t submit wrong values.

>>> 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?
> Ensure, the update goes from GREE to GREEN? You cannot, simple as that. You 
> just can minimize the risk by testing, testing, testing.

You can also simply disallow updates with FK constraint eliminating risk.

> But that holds equally true for the business key of a surrogate key table as 
> natural key table. That's why the surrogate key is such an elegant construct. 
> You can change business key of the record with id 3 from GREE to GREEN, VERT, 
> GRÜN, VERDE or ASéLDHK()*NSLDFHP)(*Z . It keeps its meaning of the perception 
> of the human eye of electromagnetic waves of the wavelength roughly between 
> 495-570 nm (according to Wikipedia).

And why do you think unconstrained updating of business key is a good thing?
You must implement rules governing what can and what cannot be changed 
*somewhere* - not doing it in the database means you have to do it in 
applications.

Anyway - let’s agree to disagree :)

—
Michal

Reply via email to