Re: Guidelines to a decent support of surrogate key implementation
Date: 24 May 2007 11:14:40 -0700
Message-ID: <1180030480.560699.111200_at_o5g2000hsb.googlegroups.com>
On May 24, 9:27 am, "Brian Selzer" <b..._at_selzer-software.com> wrote:
> CON
> Keys can change over time. Consider the following:
>
> R{A, B, C} | AB --> C, and several other relations referencing R[AB]. R:
> {A:1, B:2, C:3}
> {A:2, B:2, C:2}
>
> T1: User 1 reads row {A:1, B:2, C:3}, starts a long-running calculation.
>
> T2: User 2 updates row {A:1, B:2, C:3} to {A:3, B:2, C:3} updates cascade
> throughout the database. R:
> {A:3, B:2, C:3}
> {A:2, B:2, C:2}
>
> T3: User 3 updates row {A:2, B:2, C:2} to {A:1, B:2, C:3} updates cascade
> throughout the database. R:
> {A:3, B:2, C:3}
> {A:1, B:2, C:3}
>
> T4: User 1 updates row {A:1, B:2, C:3} to {A:1, B:2, C:4} -- BUG!!!!
All your example does is show that users who don't understand isolation levels will create bugs.
R { A, B } A->B
[ A:1, B:1 ]
[ A:2, B:2 ]
T1: User 1 Read(A:1,B:1) (Wander off to compute F(B:1) ) T2: User 2 Update(A:1,B:1) -> (A:3,B:1) T3: User 3 Update(A:2,B:2) -> (A:1,B:2) T4: User 1 Update(A:1,X) -> (A:1, F(B:1) ) <-- Bug
Let me also say that the biggest PRO of Cimode's Approach # 1 is purely performance. It would be simpler and smaller (fewer indices) and would make all kinds of nice things possible wrt.physical query plans.