From: | Michał Kłeczek <michal(at)kleczek(dot)org> |
---|---|
To: | "Peter J(dot) Holzer" <hjp-pgsql(at)hjp(dot)at> |
Cc: | pgsql-general(at)lists(dot)postgresql(dot)org |
Subject: | Re: Lookup tables |
Date: | 2025-02-07 08:22:13 |
Message-ID: | AC64A87D-D673-4D8F-B4F1-73516798BA5D@kleczek.org |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgadmin-support pgsql-general |
> On 6 Feb 2025, at 22:03, Peter J. Holzer <hjp-pgsql(at)hjp(dot)at> wrote:
>
> On 2025-02-04 22:41:38 +0100, Thiemo Kellner wrote:
>>
>> 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.
>
> I fail to see why use of a surrogate key is the problem here.
>
> Either changing the color from GREE to YELLOW makes sense or it doesn't.
>
> If it doesn't make sense, then it's release which is faulty, not the
> model.
>
> if it does make sense (I'm a bit at a loss when that might be the case,
> maybe the "color" is just a code word, or maybe they are colors in a
> design which are arbitrary but must be consistent), then the experience
> that the user has is exactly the same as if the maintenance release was
> applied just after they selected the color. Which might be a bit
> confusing but is almost certainly what is wanted.
>
This is simply saying “what is implemented is certainly wanted, so what’s the point”.
The discussion is about *defining* what is wanted and using DBMS to *enforce* that.
>
>> A) Your release changed the sementics of the record 3. It's meaning
>> changed. I cannot recommend doing that.
>
> If the release changed the semantics of an existing record the release
> was almost certainly wrong.
Is it possible to minimize the risk of “wrong releases” using mechanisms that DBMS provides?
>
>> B) If you absolutely must change the semantic, put your application
>> into maintenance mode in which noone can select anything beforehand.
>>
>> 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.
>
> Yeah, that's a good example where changing the color from GREE to YELLOW
> doesn't make sense. Presumably that ID 3 is used as a foreign key in
> lots of places, e,g. in an inventory table. Your bikes in stock won't
> just magically change color just because you changed some text in the
> database. So that change simply doesn't make sense and shouldn't be done
> as part of a maintenance release. Confusing a few people who just happen
> to open the dropdown in the wrong second is the least of your problems.
We are in agreement here. What I am also saying is:
having color name as PK and all FKs referencing it *prevents* these unwanted updates.
—
Michal
From | Date | Subject | |
---|---|---|---|
Next Message | Thiemo Kellner | 2025-02-07 11:07:56 | Re: Lookup tables |
Previous Message | Yogesh Mahajan | 2025-02-07 05:52:22 | Re: Issue running pgAdmin behind a reserve proxy |
From | Date | Subject | |
---|---|---|---|
Next Message | Andrey Borodin | 2025-02-07 10:40:44 | Re: Using Expanded Objects other than Arrays from plpgsql |
Previous Message | Paul Foerster | 2025-02-07 06:35:36 | Re: libc to libicu via pg_dump/pg_restore? |