Re: Actualizacion en Cascada de llave primaria

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

Martin Marques escribió:
> 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?
Es una larga historia!! pero por un motivo que no tengo la mas remota
idea me calculo mal unas PK y al tratar de hacer un insert me reclamaba
clave duplicada!!!.. :S fue por eso ... pero bueno puede que PG no sea
asi ... era solo simple curiosidad

>
>> 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). :-)
>
Si pero = no se quiza soy un poco mas fundamentalista ... en ese sentido
prefiero tener el control como programador .. y no darle esa
responsabilidad al motor.. no se es simple asunto de crianza no.. no
subirme al auto automatico hasta no aprender bien a manejar el mecanico...
bueno pero es interesante... solo era curiosidad..
Slds.
Javier

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Juan Martínez 2007-11-10 14:28:04 Re: Actualizacion en Cascada de llave primaria
Previous Message Martin Marques 2007-11-10 12:20:04 Re: Actualizacion en Cascada de llave primaria