Re: Actualizacion en Cascada de llave primaria

From: Martin Marques <martin(at)marquesminen(dot)com(dot)ar>
To: Javier Chavez Barra <jchavezb(at)gmail(dot)com>
Cc: postgresayuda <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: Actualizacion en Cascada de llave primaria
Date: 2007-11-10 12:20:04
Message-ID: 4735A1F4.5030002@marquesminen.com.ar
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Javier Chavez Barra escribió:
> Martin Marques escribió:
>> Sebastián Villalba escribió:
>>> On Fri, 9 Nov 2007 15:12:54 -0800 (PST), WILLIAM PARRA wrote
>>>> Buenas tardes compañeros.
>>>
>>> Hola William...
>>>
>>>> Necesito que por favor me den luces, de como resolver de la mejor
>>>> manera la siguiente situación: Debo actualizar un registro, más
>>>> exactamente el documento de una persona, el cual es la llave
>>>> primaria de una tabla de inscritos. Esa tabla, tiene registros
>>>> relacionados en tablas hija.
>>>
>>> Es una mala idea de diseño que un documento sea una llave primaria.
>>> Pueden
>>> haber muchos tipos de documentos, algunos incluir letras inclusive,
>>> por lo
>>> tanto, creo que lo mejor sería alterar la tabla agregándole un campo
>>> serial,
>>> que sea éste la clave primaria y el documento quizás una clave
>>> "candidata"
>>> (así se les llama no?).
>>
>> Definí llave primaria y vas a ver que la llave primaria de una persona
>> en Argentina (de donde somos nosotros) es la 3-tupla
>> (tipo-doc,numero,sexo) (la ultima es justamente para evitar esa letra
>> que decis que a veces aparece).
>>
>> Igualmente, yo a todas las tablas le pongo un campo SERIAL (con nombre
>> de campo unificado en todas las tablas) para usar de PK. Imaginate que
>> sino seria complicado atar una tabla a otra que tiene una PK formada por
>> 3 columnas.
>>
>> Simplemente, mis 2 centavos.
>>
>> --
>> TIP 8: explain analyze es tu amigo
>>
> Pregunta aparte , dentro de esto mismo ... :o) entiendo que un campo
> serial es un campo autoincrementable verdad????

Si, pero no es PK. Tenes que usar las palabras claves "PRIMARY KEY" para
que no haya nulos ni duplicados.

> diganme una cosa como se
> comportan esos campos en PG porque yo por norma siempre prefiero
> calcular el valor del campo cuando es una clave primaria porque me han
> pasado tallas en sqlserver al menos que esos campos a veces se corrompen

Nunca me paso. ¿Qué significa que se corrompe el campo? ¿En qué forma se
corrompe?

> y uffff me dio muuucho trabajo arreglar esas tablas especialmente cuando
> tienen muuuchos registros.. lo otro siempre por ejemplo en un campo como
> el DNI o RUT en chile dejo la clave con otro campo porque imaginense lo
> que significaria si alguien se equivoca al ingresa uno de esos datos y
> modificar una clave primaria... ufff... no se es solo para compartir
> experiencias... que me pueden decir???

Yo ya he escuchado muchas veces esto. Se puede actualizar perfectamente
si las referencias tienen el "ON CASCADE UPDATE".

Una tabla de personas para mi tendria campos algo asi: id (PK de tipo
BIGSERIAL), tipodoc (INT REFERENCIA a una tabla donde estan los tipos de
documentos validos), numero (INT8 (y no me alcanza asi siquiera) con el
numero de documento), nombres (VARCHAR(120) o mas... es por
experiencia), apellido (VARCHAR(120) idem anterior).

Despues cualquier tabla que tenga que tener como referencia a una
persona haria un REFERENCE persona(id). :-)

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Javier Chavez Barra 2007-11-10 13:02:42 Re: Actualizacion en Cascada de llave primaria
Previous Message Javier Chavez Barra 2007-11-10 12:03:35 Re: Actualizacion en Cascada de llave primaria