Comunidad de diseño web y desarrollo en internet online

¿Autoincrement / Serial o Tabla Auxiliar?

Citar            
MensajeEscrito el 11 Dic 2008 04:04 pm
Hola a tod@s, la pregunta me surgió luego de leer esto.

¿Realmente cuales son las ventajas / desventajas de manejar el id de alguna tabla con una u otra opción? ¿Se considera mejor práctica utilizar una en vez de la otra?

En lo personal siempre he trabajado con los id de mis tablas como Seriales, nunca me llamó la atención usar una Tabla Auxiliar para llevar el control de los id de las demás tablas, ¿la razón?, pues, nunca me he sentado a estudiar que tan factible es utilizar una Tabla Auxiliar; Con los Seriales nunca he tenido problemas y trabajo bien con ellos, además de que no me agrada la idea de estar consultando y actualizando la Tabla Auxiliar con cada insercion que se haga en una tabla con id consecutivo , si con un id Serial el manejador de base de datos lo hace automaticamente ¿para qué hacerlo yo "manualmente"?

No se si esté errada mi manera de abarcar lo de los id consecutivos, justo por eso formulo la pregunta a "La gente del foro" :P

Por KB-27

Claber

301 de clabLevel



 

My very secret HQ

firefox
Citar            
MensajeEscrito el 11 Dic 2008 06:01 pm
en lo personal no me caliento la cabeza, un autoincrement y san se acabo.

por otro lado si preciso que sea un numero estrictamente correlativo(por ejemplo el numero de una factura) hago un campo extra en donde ira el numero real y dejo como autoincrement el ID interno

Por Inyaka

Claber

3176 de clabLevel

9 tutoriales
2 articulos

Genero:Masculino   Desarrollador de GAIA

Programador y fotógrafo

firefox
Citar            
MensajeEscrito el 12 Dic 2008 01:46 am
tabla auxiliar me gusta mas para mejorar velocidad y estabilidad en la base de datos depronto con pocos datos no sera de mucho pero para el futuro sera muy bueno saludos

Por talcual

686 de clabLevel



 

Colombia

firefox
Citar            
MensajeEscrito el 12 Dic 2008 02:21 am
¿175.000 filas es pequeño?

una tabla auxiliar la puedes crear para relacionar por ejemplo 2 tablas, pero no entiendo bien tu idea de dejar el id fuera de l tabla
¿como relacionarias la tabla auxiliar con el la tabla principal?¿por ejemplo con 2 cmpos unicos ? ¡¡eso es un id !!

Por Inyaka

Claber

3176 de clabLevel

9 tutoriales
2 articulos

Genero:Masculino   Desarrollador de GAIA

Programador y fotógrafo

firefox
Citar            
MensajeEscrito el 12 Dic 2008 03:16 am
Hola

Si 175.000 registros no es una tabla grande... con 2.000.000 se puede comenzar a hablar sobre un tamaño grande... Igual para q una tabla sea o no grande tb depende de cuanta y de q tipo es la inforamcion q guarda, como estan los indices colocados y demas...

Cuando se habla de una 3 tabla como en el caso q se comenta es para relacionar tablas con relaciones n a n, o bien como tabla aximilar para una estrucutra de tablas en estrella... mucho depende de como es la base de datos, q informacion se tenga y q tipos de consultas se van a realizar (principalmente)... o sea, es una cuestion de diseño de BD, normalizacion, tuneo y optimizacion...


Saludos!

Por alfathenus

833 de clabLevel

5 tutoriales

 

buenos aires || Argentina

firefox
Citar            
MensajeEscrito el 12 Dic 2008 04:59 am
@alfathenus


osea dices que le di a 1 de 2 ??

PD. es una DB chiquita pero cumplidora XD

Por Inyaka

Claber

3176 de clabLevel

9 tutoriales
2 articulos

Genero:Masculino   Desarrollador de GAIA

Programador y fotógrafo

firefox
Citar            
MensajeEscrito el 12 Dic 2008 11:35 am

talcual escribió:

tabla auxiliar me gusta mas para mejorar velocidad y estabilidad en la base de datos
¿A qué te refieres con "estabilidad"? ¿Qué es lo que la la hace ser mas "estable"?

Por KB-27

Claber

301 de clabLevel



 

My very secret HQ

msie7
Citar            
MensajeEscrito el 12 Dic 2008 12:33 pm

KB-27 escribió:

talcual escribió:

tabla auxiliar me gusta mas para mejorar velocidad y estabilidad en la base de datos
¿A qué te refieres con "estabilidad"? ¿Qué es lo que la la hace ser mas "estable"?


en verdad esa asunto también me intrigo ¿estabilidad?
que yo sepa mi querida DB mysql es extremadamente estable y siempre entrega el resultado esperado siempre y cuando yo haga bien la consulta, osea por si uso correctamente los INNER

Por Inyaka

Claber

3176 de clabLevel

9 tutoriales
2 articulos

Genero:Masculino   Desarrollador de GAIA

Programador y fotógrafo

firefox
Citar            
MensajeEscrito el 12 Dic 2008 03:58 pm

Inyaka escribió:

pero no entiendo bien tu idea de dejar el id fuera de l tabla
Lo que yo he visto que asocié con lo de la Tabla Auxiliar que dijo talcual es algo como lo siguiente, supongamos la siguiente tabla:

tabla1 (id, campo1, campo2...)

Además existe una Tabla Auxiliar con más o menos la siguiente estructura:

tablaConsecutivos (tabla, id)

en la cual existirá una tupla donde tabla = 'tabla1' e id = el último id que se haya insertado en tabla1; entonces antes de hacer una inserción en tabla1 se haría algo como esto:

Código :

SELECT id FROM tablaConsecutivos WHERE tabla = 'tabla1';
El id que devuelva la consulta + 1 será el valor que se inserte en el campo id de tabla1 y luego se haría un UPDATE como este:

Código :

UPDATE tablaConsecutivos SET id = id + 1 WHERE tabla = 'tabla1';
Cabe destacar que por cada tabla en la BD que tenga id existirá una tupla en tablaConsecutivos para "controlar" su id...

No se si es lo que quiere decir talcual pero fue con lo que yo lo asocié, y he visto a unas cuantas personas administrar así lo de los id de sus tablas...

Por KB-27

Claber

301 de clabLevel



 

My very secret HQ

firefox
Citar            
MensajeEscrito el 12 Dic 2008 04:16 pm
¿una tabla para controlar algo que perfectamente se puede controlar con SQL ???
hace no mucho se invento algo llamado autoincrement y/o la posibilidad de ver un MAX()


veo como muy mala idea complejisar una DB con tablas innecesarias, cuando alguien quiera entender esa DB el análisis de la DB va a ser tan complejo que el desarrollador se acordara de la madre y familia de toda la empresa.

Por Inyaka

Claber

3176 de clabLevel

9 tutoriales
2 articulos

Genero:Masculino   Desarrollador de GAIA

Programador y fotógrafo

firefox
Citar            
MensajeEscrito el 12 Dic 2008 04:23 pm
Pienso lo mismo, realmente me parace innecesario a parte de feo... Pero tenía la duda porque, repito nuevamente, he visto a unos cuantos hacerlo...

Por KB-27

Claber

301 de clabLevel



 

My very secret HQ

firefox
Citar            
MensajeEscrito el 12 Dic 2008 05:01 pm
Autoincrement, sin duda es lo mejor, lo mas rápido, lo mas eficiente, lo mas elegante y lo mas óptimo. ^^

Por Dano

BOFH

4273 de clabLevel

14 tutoriales
4 articulos
10 ejemplos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Lugar estratégico para vigilarte

firefox
Citar            
MensajeEscrito el 12 Dic 2008 05:33 pm
excepto si precisas un numero correlativo, ahí debieras deducirlo usando un MAX()

Por Inyaka

Claber

3176 de clabLevel

9 tutoriales
2 articulos

Genero:Masculino   Desarrollador de GAIA

Programador y fotógrafo

firefox
Citar            
MensajeEscrito el 12 Dic 2008 06:01 pm
si tienes un autoincrement y borras un registro el proximo numero no va a ser el q sigue sino el q le sigue al q borraste es decir algo como

1
2
3 // -- > borras este

y el proximo q coloques sale algo como

1
2
4 //--> aqui empieza la inestabilidad del sistema ;-) bueno a mi parecer me quedo con las tablas auxiliares de consecutivos saludos

Por talcual

686 de clabLevel



 

Colombia

msie7
Citar            
MensajeEscrito el 12 Dic 2008 06:20 pm

talcual escribió:

si tienes un autoincrement y borras un registro el proximo numero no va a ser el q sigue sino el q le sigue al q borraste es decir algo como

1
2
3 // -- > borras este

y el proximo q coloques sale algo como

1
2
4 //--> aqui empieza la inestabilidad del sistema ;-) bueno a mi parecer me quedo con las tablas auxiliares de consecutivos saludos

Para hacer el escenario que planteas es muy sencillo, lo que pasa es que no sabes como hacerlo en SQL.
ALTER TABLE `tu_tabla` AUTO_INCREMENT =3, y ya con eso, se soluciona el supuesto problema que tu ves.


Ahora en AMBOS caso, si se borra, el uno, quedará ese hueco, ni tu solución, ni el autoincrement lo solucionan, para eso tendriamos que implementar un sistema de pila, pero no es el caso. Como comento, para el control el autoincrement lo resuelve todo, ya te dije como resolver el problema que planteas.

Por Dano

BOFH

4273 de clabLevel

14 tutoriales
4 articulos
10 ejemplos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Lugar estratégico para vigilarte

firefox
Citar            
MensajeEscrito el 13 Dic 2008 03:10 am
me quedo con la auxiliar jajaja bueno a cada quien le gusta lo q mejor le parezca jajaja por ejemplo yo no borror registros simplemente los desabilito por medio de un campo saludos y paz y amor jajaja

Por talcual

686 de clabLevel



 

Colombia

firefox
Citar            
MensajeEscrito el 13 Dic 2008 04:58 am
La razón por la que existen los autoincrement es precisamente para no tener que usar tablas de más, duplicando innecesariamente datos, para poder relacionar las tablas. El uso de tablas auxiliares fue creado cuando no existían las base de datos relacionales.
Respecto al tema de la estabilidad, la estás confundiendo con el mantenimiento de la secuencia en el autoincrement; pero es que el autoincrement no fue creado para simplemente generar números secuenciales sino para crear un valor único que pueda servir como ID a la tabla; que sea o no secuencial es poco importante.
Claro que puedes seguir usando tablas auxiliares, pero los gustos tienen poco o nada que ver con lo que sea mejor para el rendimiento y estabilidad de la base de datos y sus relaciones.

Por The Fricky!

Presidente

6168 de clabLevel

3 tutoriales
8 articulos

Genero:Masculino   Bastard Operators From Hell Héroes

Piccola Venezia...

chrome
Citar            
MensajeEscrito el 13 Dic 2008 06:25 am

talcual escribió:

si tienes un autoincrement y borras un registro el proximo numero no va a ser el q sigue sino el q le sigue al q borraste es decir algo como

1
2
3 // -- > borras este

y el proximo q coloques sale algo como

1
2
4 //--> aqui empieza la inestabilidad del sistema ;-) bueno a mi parecer me quedo con las tablas auxiliares de consecutivos saludos


¿que parte de MAX() no entiendes? http://dev.mysql.com/doc/refman/5.0/es/group-by-functions.html#id2747481

Por Inyaka

Claber

3176 de clabLevel

9 tutoriales
2 articulos

Genero:Masculino   Desarrollador de GAIA

Programador y fotógrafo

firefox
Citar            
MensajeEscrito el 13 Dic 2008 12:24 pm

talcual escribió:

si tienes un autoincrement y borras un registro el proximo numero no va a ser el q sigue sino el q le sigue al q borraste es decir algo como

1
2
3 // -- > borras este

y el proximo q coloques sale algo como

1
2
4 //--> aqui empieza la inestabilidad del sistema ;-) bueno a mi parecer me quedo con las tablas auxiliares de consecutivos saludos


Inestable por eso? dime allí cual es la razón de inestabilidad?

Una clave primaria NUNCA, lee bien, NUNCA se debe sustituir así haya sido borrada.

saludos

Por Maikel

BOFH

5575 de clabLevel

22 tutoriales
5 articulos

Genero:Masculino   Team Cristalab

Claber de baja indefinida

firefox
Citar            
MensajeEscrito el 14 Dic 2008 06:58 pm
inyaka entiedno max() y no me interesa utlilizarla y como dice makiel nunca jajaja saludos ;-)

Por talcual

686 de clabLevel



 

Colombia

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.