Hi Sai,

This problem comes up frequently. One solution to it is an unimplemented feature called computed columns (see DERBY-481). Hopefully, we can raise the visibility of that issue.

In the meantime, I think that changing your INSERT and UPDATE code is a good approach. You can give yourself some extra peace of mind by adding a CHECK constraint which ensures that the normalized column has the correct value and that there aren't any places in your application where the wrong values are leaking in. E.g.:

ij> create table foo
(
 a varchar( 50 ),
 b varchar( 50 ),
 check ( b = upper( a ) )
);
0 rows inserted/updated/deleted
ij> insert into foo values ( 'abc', 'ABC' );
1 row inserted/updated/deleted
ij> insert into foo values ( 'def', 'DEf' );
ERROR 23513: The check constraint 'SQL080116120009780' was violated while performing an INSERT or UPDATE on table '"APP"."FOO"'.

Hope this helps,
-Rick

Sai Pullabhotla wrote:
Thanks Bryan,
I thought about it. But I'm not sure if it is THE BEST way. Any other folks
here have any ideas/comments?
Also, let us say, if we do go with two columns approach (one for Display
purpose and the other for storage purpose), is there a way I can set up
triggers on these tables to automatically put the lower/UPPER case values in
the internal column? I tried to create a BEFORE INSERT trigger, but did not
have any luck. I could not even get it to compile.
Or do you think it is best to change the code where the INSERT and UPDATE
statements are, rather than messing with triggers? I appreciate any ideas/comments. Sai Pullabhotla Linoma Software 1409 Silver St Ashland, NE 68003 (402) 944 4242 x 754
(800) 949 4696 x 754
-----Original Message-----
From: Bryan Pendleton [mailto:[EMAIL PROTECTED] Sent: Tuesday, January 15, 2008 5:38 PM
To: Derby Discussion
Subject: Re: Case-Insensitive Unique Constraint

Is there a way to create a unique constraint/index which ensures the
uniqueness of data IGNORING the case?

One idea would be to store the data twice, in two separate columns:
  - in one column, store the data normally, in the case as provided
  - in the other column, store the data in all upper case

Then create a unique index on the all-upper-case column.

thanks,

bryan




Reply via email to