Re: Thoughs after discussions at OSCON - Mailing list pgsql-advocacy

From Jim C. Nasby
Subject Re: Thoughs after discussions at OSCON
Date
Msg-id 20050816145530.GF5928@pervasive.com
Whole thread Raw
In response to Re: Thoughs after discussions at OSCON  (Rick Morris <rick@brainscraps.com>)
Responses Re: Thoughs after discussions at OSCON  (Rick Morris <rick@brainscraps.com>)
List pgsql-advocacy
On Tue, Aug 16, 2005 at 10:15:38AM -0400, Rick Morris wrote:
> John DeSoi wrote:
> >I don't disagree but after doing quite a bit of PHP the last few  weeks
> >(using Drupal) I see more clearly why most people don't go to  the
> >trouble. I can create all kinds of constraints in my database but  when
> >I go to save a row that might violate several of them, I'll only  get
> >one error back. This won't work in a web form interface where I  should
> >provide feedback on all of the errors at once rather than one  at a
> >time. So if I want this validation logic to be available at both  the
> >application and database level, I have to somehow parse it from  the
> >database or create some superset of the specification that will  work in
> >the application and create the constraints in the database.  Otherwise,
> >I need to maintain the constraints in both places and keep  them in sync.
>
> IMHO, this is exactly where there needs to be more work done on
> application frameworks: automated ways to propagate constraints and
> business logic back into the application layer.
>
> I explored those concepts to a small extent (with code examples) in a
> couple articles for PHP|Architect. I think it is an area that would
> involve some serious work, but would bring some serious benefits.

There's at least 3 ways this can happen. You can define the
logic/constraints in the application and push them to the database, you
can define them in the database and push them to the application, or you
can use a seperate framework to drive both.

Personally, I'm in favor of #2, because it means you should be able to
have any application use the constraints in the database.

I think this is something that could possibly be added to PostgreSQL via
a pgfoundry project. My initial thought is to provide a means to
associate certain constraints/triggers with 'human readable' conditions.
So for example, in a table that has username, you could link the unique
constraint on username to a message that says 'That username is already
in use.' Unfortunately this still doesn't allow for checking multiple
constraints at once in the database, and uniqueness can really only be
checked by the database at insert/update time. But other constraints
could be checked ahead of time.

Another possibility is improving on the existing frameworks. Personally,
I'm not terribly impressed with the frameworks I've looked at because
they seem to divorce themselves from the database too much. They
generally put a much greater load on the database because they want to
do as much as possible in the application. For example, if you mark a
field as being unique, many of them will do a select before trying to
insert or update to see if a record already exists. Now you've got the
database running 2 queries instead of 1.

So far, the best solution I've seen is the XML-based 'datadef' that a
friend of mine created at a former job. It was database-centric enough
so that it could drive the entire database creation process (including
triggers, stored procs, etc) and do it well, while also creating
application code (C/C++ in this case). Since it was XML/XSLT based it
was pretty easy to add new features, and more importantly, it could
support any programming language out there. Everything else I've seen is
tied to a specific language, which is a big downside. Unfortunately, he
never wanted to release it to the community because he felt the
implementation was ugly.
--
Jim C. Nasby, Sr. Engineering Consultant      jnasby@pervasive.com
Pervasive Software        http://pervasive.com        512-569-9461

pgsql-advocacy by date:

Previous
From: Rick Morris
Date:
Subject: Re: Thoughs after discussions at OSCON
Next
From: Rick Morris
Date:
Subject: Re: Thoughs after discussions at OSCON