Re: [ODBC] ODBC

From: Jean-Michel POURE <jm(dot)poure(at)freesurf(dot)fr>
To: Alan Wayne <alanjwayne(at)yahoo(dot)com>
Cc: pgsql General List <pgsql-general(at)postgresql(dot)org>
Subject: Re: [ODBC] ODBC
Date: 2002-03-17 09:13:21
Message-ID: 200203170913.g2H9DL7O017047@www1.translationforge
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: 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

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Andre Radke 2002-03-17 15:15:29 Re: problem with array of boxes
Previous Message Seth Northrop 2002-03-17 04:10:46 OO Data