On 02/04/10 13:56 +0200, Mathias Behrle wrote: > * Betr.: " [tryton-dev] Bring some attention on issue1422" (Fri, 2 Apr 2010 > 11:10:06 +0200): > > > There is a possible solution that will work only for PostgreSQL: > > > > CREATE UNIQUE INDEX "index" ON "table" ("name", COALESCE("parent", 0)); > > > > Is there anybody who has better solution? > > > > > > [1] http://bugs.tryton.org/roundup/issue1422 > > Since it seems, that this issue has to be solved indivdually per DBMS and we > don't want to provide our own logical layer, this is the way to go for me. > > http://dev.mysql.com/doc/refman/5.0/en/create-index.html > http://bytes.com/topic/oracle/answers/65985-unique-constraint-null-values
I don't understand what you want to show in those links. Any way, when looking at the comments in oracle thread, I thought about a solution. We could add a third integer field with the same value then "parent" but without the foreign constraint. It will be filled by COALESCE("parent", -1). The unique constraint will become: UNIQUE("name", "parent_") We could add a constraint to ensure that both values are always sync: CHECK(COASLESCE("parent", -1) = "parent_") The "parent_" field will be filled by the override of create and write functions. I know this sounds a little bit hacking but this is my best solution :-) -- Cédric Krier B2CK SPRL Rue de Rotterdam, 4 4000 Liège Belgium Tel: +32 472 54 46 59 Email/Jabber: cedric.kr...@b2ck.com Website: http://www.b2ck.com/
pgp1F7RF10J5h.pgp
Description: PGP signature