Re: [ODBC] ODBC - Mailing list pgsql-general
From | Jean-Michel POURE |
---|---|
Subject | Re: [ODBC] ODBC |
Date | |
Msg-id | 200203170913.g2H9DL7O017047@www1.translationforge Whole thread Raw |
Responses |
Re: [ODBC] ODBC
|
List | pgsql-general |
Hi Alan, Maybe you could CC your mail to pgsql-general so that anyone can participate. > When building referential integrity, Foxpro has a > "restrict" option which can be placed on the > parent-to-child delete event. The meaning here is to > prevent deletion of a parent record when it has > children in a relationship. I'm not sure how to > implement this in postgre other then writing the > front-end application VERY CAREFULLY so as to avoid > deleting a parent when it has children. (Having the > child be deleted when the parent is deleted makes > sense from a referential point of view, but since I am > dealing with a medical database, I just assume my > staff didn't remove records after making a data entry > mistake.) Moreover, the postgre trigger of cascading a > delete is going to cause problems with at least one of > my tables. In designing this table, there are two > fields that reference two parent tables such that if > one of the parents is deleted forcing a delete cascade > into this file, it will remove the detail record (in > this file) also needed for the second parent. Hence, > referential integrity is violated. A restrict clause > for these parents would avoid the problem. There are several ways to achieve this in PostgreSQL : - foreign keys (this is what it is for. foreign keys are specific rules), - write custom rules (rules differ from triggers as they can re-write SQL during parsing, i.e. stop an SQL query from being executed), - writte triggers that test children existence on delete. As for me, I use triggers because before 7.2 it was impossible to drop rules. From 7.2+ on, the best solution to test parent-child relashionship are rules. This can be done quite easily within pgAdmin2. > A second problem which I have partially solved > (but don't like), is that within a table I need to > make sure that records are unique when they are built > upon user entry data. Specifically, I don't wont to > trust the front end application to correctly input > "wayne" or "Wayne" (etc.) as "WAYNE". My solution, > which seems cumbersome, is to make a unique index in > postgre based upon my added function of "namebday" > which combines the first and last names input with the > birthdate into a string. The names are forced to > uppercase with the string returned as text for the > unique index. It would be nice to force an unique > index with simple syntax like....create unique index > ...on zPeople (cLastname,cFirstname,dBirthdate). I'm > not sure exactly what that type of index would produce > nor am I sure it would stop "Wayne" from being added > when "WAYNE" is already present. Ofcouse using > (upper(cLastname),upper(cFirstname),dBirthdate) as the > argument crashes. (So I ended up writing my "namebday" > function.) This is a nice solution but it will slow down your database (in the case of a large database). Create a field name_tg and store upper(name) in name_tg using a trigger. Add a unique index on name_tg. Do not hesitate to use pgAdmin2 to write rules and triggers. Only the last CVS version supports trigger pseudo modification (=fake drop / create to simulate trigger modification). After installing pgAdmin2, the lastest binaries can be downloaded from http://cvs.pgadmin.org/cgi-bin/viewcvs.cgi/binaries/ (all binaries are needed when upgrading). Have fun, Jean-Michel
pgsql-general by date: