Thanks, Claudio. What you suggested is essentially what I'm doing. I just 
thought if this were something common, someone would have a better way of doing 
it. I would LOVE to be able to simply insert into a names-addresses-phones 
VIEW, but I haven't been able to make that work.

On 4 Jan 12, at 16:48, Claudio Nanni wrote:

> Hi Jan,
> 
> I am not sure to understand what your question is,
> what do you mean with inserting updating 2-3 tables?
> I guess treat the 3-tables join as one single 'object' ?
> 
> Since you have the referential integrity constraint on the [addresses]
> and [phones] table you need to follow this basic pattern:
> 
> INSERT:
> 
> 1.insert the record into [names]
> 2.insert the records into [addresses] and [phones]
> 
> DELETE:
> 1.delete the records from [addresses] and [phones]
> 2.delete the record from [names]
> 
> UPDATE:
> (a)no problem if you don't update the foreign keys (i.e. assigning an
> address and/or a phone number to another person)
> (b)if you need to update the foreign keys just make sure you set them
> to an existing names_id
> 
> The problem you mention with the view is probably coming from the fact
> that when you insert into a view although theoretically possible if
> the underlying select is a simple multi-table join (updatable view)
> you have no assurance on the order of the inserts inside the view, it
> is probably depending on the specific storage engine implementation.
> 
> I hope this shed a bit of light.
> 
> Claudio
> 
> 2012/1/5 Jan Steinman <j...@bytesmiths.com>:
>> Having been steeped in object-orientation, I have a nasty habit of creating 
>> parent-child tables that have a 1:1 relationship where the child extends the 
>> parent, sometimes to a depth of three or more.
>> 
>> For example:
>> 
>> CREATE TABLE names TYPE InnoDB
>>   id INT NOT NULL AUTO INCREMENT PRIMARY KEY,
>>   name_first VARCHAR(255) NOT NULL,
>>   name_last VARCHAR(255) NOT NULL
>> 
>> CREATE TABLE addresses TYPE InnoDB
>>   names_id INT NOT NULL REFERENCES names (id)
>>   street VARCHAR(255) NOT NULL,
>>   city VARCHAR(255) NOT NULL
>> 
>> CREATE TABLE phones TYPE InnoDB
>>   names_id INT NOT NULL REFERENCES names (id)
>>   phone VARCHAR(255) NOT NULL
>> 
>> (Keyed in from memory for schematic purposes, may contain errors. CREATE 
>> syntax is not what I'm here about.)
>> 
>> Now how do I go about INSERTing or UPDATEing two or three tables at once in 
>> a way that maintains referential integrity?
>> 
>> I've tried making a VIEW, but I wasn't able to INSERT into it. I don't think 
>> I was violating the restrictions on VIEWs as stated in the manual.
>> 
>> Is there a generalized pattern that is used for INSERTing and UPDATEing 
>> these parent-child tables? Does it require a TRIGGER in order to propagate 
>> the foreign key?
>> 
>> (BTW: MySQL version 5.0.92, if that matters...)
>> 
>> Thanks in advance for any help offered!
>> 
>> ----------------
>> Security is mostly a superstition. Security does not exist in nature, nor do 
>> the children of men as a whole experience it. Avoiding danger is no safer in 
>> the long run than outright exposure. Life is either a daring adventure, or 
>> nothing. -- Helen Keller
>> :::: Jan Steinman, EcoReality Co-op ::::
>> 
>> 
>> 
>> 
>> 
>> --
>> MySQL General Mailing List
>> For list archives: http://lists.mysql.com/mysql
>> To unsubscribe:    http://lists.mysql.com/mysql
>> 
> 
> 
> 
> -- 
> Claudio

----------------
If they can get you asking the wrong questions, they don't have to worry about 
the answers. -- Thomas Pynchon
:::: Jan Steinman, EcoReality Co-op ::::





--
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe:    http://lists.mysql.com/mysql

Reply via email to