Ah.  I'm interfacing to the database via Ruby.  So, write a function in 
pl/pgsql to do an insert, update, and delete that maintain the integrity that I 
want and then call those via Ruby.

On Apr 15, 2011, at 7:59 AM, David Johnston wrote:

> More along the lines of pl/pgsql and/or whatever application language you are 
> using; not rules.
> 
> On Apr 15, 2011, at 8:45, Perry Smith <pedz...@gmail.com> wrote:
> 
>> Mostly, this entire project is for me to learn.  What started out as a toy 
>> has gown into something that about 40 people use each day but it is 
>> definitely not normal production stress.  Or course, I'd like to assume and 
>> do things as if it was going to be stressed.
>> 
>> For whatever reason, I've done simple functions but I've never done complex 
>> wrappers like you are talking about.  Just to be sure, when you say "writ[e] 
>> a wrapper around the insert/update layer", you are referring to the 
>> techniques documented in chapter 36 "The Rule System" ?
>> 
>> That has always intimidated me but perhaps its time to grow.
>> 
>> Thank you again,
>> Perry
>> 
>> On Apr 14, 2011, at 7:00 PM, David Johnston wrote:
>> 
>>> It is not easy to follow...but I'll toss out some thoughts anyway.
>>> 
>>> I would generally not de-normalize the data model in order to make
>>> referential integrity easier.  If your "requirements" are that complex then
>>> writing a wrapper around the insert/update layer for the tables in question
>>> is a better idea.  You can perform a higher level of validation without
>>> sacrificing data integrity.
>>> 
>>> I would suggest looking at both the kinds of selection queries you plan to
>>> run as well as what kinds of data (i.e., relationships between containers
>>> and objects) to see how readily the final model will work.  Two things that
>>> SQL does have challenges with is indefinite hierarchies and many-to-many
>>> relationships with constraints.  You seem to be using both.  It isn't that
>>> SQL cannot handle them but as a programmer you need to be extra careful to
>>> introduce appropriate constraints on data entry and to spend extra time
>>> figuring out what valid combinations are likely to result in incorrect
>>> results given the kinds of queries you are using.
>>> 
>>> There isn't anything wrong with the normal form violation but you probably
>>> want to understand where your model is vulnerable to update anomalies.  If
>>> you can add some additional tables and turn the de-normalized data into
>>> foreign-keys you can use referential integrity to at least limit your
>>> exposure but it may not remove it completely.
>>> 
>>> In the end sometimes the only real question of import is whether the
>>> solution works.  If you are concerned then anything built upon the schema
>>> should be designed such that you can refactor the underlying schema if you
>>> desire.  But it isn't necessarily worth it to exhaust every possible avenue
>>> to find the better solution if you have one that works.  The question
>>> becomes whether you have the resources (time and/or money) to search for the
>>> better solution now or whether you should just use the immediately viable
>>> solution until it breaks.
>>> 
>>> David J.
>>> 
>>> 
>>> -----Original Message-----
>>> From: pgsql-general-ow...@postgresql.org
>>> [mailto:pgsql-general-ow...@postgresql.org] On Behalf Of Perry Smith
>>> Sent: Thursday, April 14, 2011 7:29 PM
>>> To: pgsql-general@postgresql.org
>>> Subject: [GENERAL] Normalize or not?
>>> 
>>> I hope this is reasonably easy to follow.  I'm looking forward to your
>>> thoughts and comments.
>>> 
>>> Thank you,
>>> Perry Smith
>>> 
>>> 
>>> 
>>> --
>>> Sent via pgsql-general mailing list (pgsql-general@postgresql.org) To make
>>> changes to your subscription:
>>> http://www.postgresql.org/mailpref/pgsql-general
>>> 
>> 


-- 
Sent via pgsql-general mailing list (pgsql-general@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-general

Reply via email to