[Ur] solution to the DB chicken and egg problem?

Adam Chlipala adamc at csail.mit.edu
Sun Apr 2 09:02:15 EDT 2017


Actually, Ur/Web won't even accept those table definitions: no mutually 
recursive definitions yet, w.r.t. constraints.  And I haven't thought 
before about allowing temporary breaking of constraints.

On 04/02/2017 08:35 AM, Marko Schütz Schmuck wrote:
> If I have tables
>
> table chicken : { Id : int, Egg : int }
>        PRIMARY KEY (Id),
>        CONSTRAINT egg FOREIGN KEY Egg REFERENCES egg(Id)
>
> table egg : { Id : int, Chicken : int }
>        PRIMARY KEY (Id),
>        CONSTRAINT chicken FOREIGN KEY Chicken REFERENCES chicken(Id)
>
> Outside of Ur/Web this would be solved by setting the constraints
> DEFERRABLE INITIALLY DEFERRED and do the INSERTs pairwise inside a
> single transaction.
>
> I doubt that there currently is a way to do this in Ur/Web since there
> is neither a way to specify DEFERRABLE INITIALLY DEFERRED nor a way to
> explicitly form transactions.
>
> Would it be enough to introduce an operator
>
> dml_sequence : dml -> dml -> dml
>
> allowing two dml statements to be composed and run in a single
> transaction together with exposing DEFERRABLE INITIALLY DEFERRED at
> the Ur/Web language level?
>
> Best regards,
>
> Marko



More information about the Ur mailing list