[Pgsql-ayuda] estructuras

Martin Marques martin@bugs.unl.edu.ar
Sat, 20 Dec 2003 21:00:46 -0300


Una pregunta que puede dar tela, pero bueno, yo tiro la bomba. :-)

Tengo una tabla de estados (alta, baja, suspendido, etc.) la idea es que=20
determinadas tablas tendran estados, pero posiblemente no sean los mismos=20
estas de personas que de objetos, y posiblemente en el futuro se puedan=20
agregar otras tablas que necesitren un campo estado.

Por lo tanto lo que hice fue agregar un campo tabla/relacion que tiene la=20
tabla de la cual hace referencia el estado, teniendo entonces uan estructur=
a=20
como esta:

estado		char
descripcion	varchar(50)
tabla		varchar(20)
PK(estado,tabla)

La cuestion es que si en la tabla de usuarios necesito un campo estado que=
=20
haga referencia a esta tabla tendria que hacer una relacion doble, lo cual =
es=20
ridiculo (al menos a mi modo de pensar).

La otra solucion seria cambiar el PK creando un nuevo campo para que la=20
estructura quede asi:

codigo		SERIAL PK
estado		char
descripcion	varchar(50)
tabla		varchar(20)

y fuerzo la visualizacion a traves de vistas.

La bomba seria: Es adecuado usar siempre autoincremetales (serial) en todas=
=20
las tablas (es una costumbre que casi siempre aplico, pero esta tabla se fu=
e=20
complicando sola), o a veces es mejor que si la forma de identificar cada=20
registro de la tabla es un varchar especifiquemos ese como PK?

Mi insertidumbre aparece porque veo que mucha gente siempre usa un campo=20
entero como PK, pero en algunos libros de bases de datos SQL vi que usan=20
mucho mas campos varchar como PK.

Sera la famosa guerra academicos vs. "real world environment"?

=2D-=20
select 'mmarques' || '@' || 'unl.edu.ar' AS email;
=2D----------------------------------------------------------------
Mart=EDn Marqu=E9s                  |        mmarques@unl.edu.ar
Programador, Administrador, DBA |       Centro de Telem=E1tica
                       Universidad Nacional
                            del Litoral
=2D----------------------------------------------------------------