Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

Auto_increment salvo que...

Estas en el tema de Auto_increment salvo que... en el foro de Bases de Datos General en Foros del Web. Hola tengo una consulta un poco compleja... Mediante un formulario cargo registros en una tabla que tiene la siguiente forma: CREATE TABLE IF NOT EXISTS ...
  #1 (permalink)  
Antiguo 11/01/2009, 01:53
 
Fecha de Ingreso: abril-2003
Mensajes: 260
Antigüedad: 21 años
Puntos: 1
Auto_increment salvo que...

Hola tengo una consulta un poco compleja...

Mediante un formulario cargo registros en una tabla que tiene la siguiente forma:

CREATE TABLE IF NOT EXISTS `base` (
`id` int(7) NOT NULL auto_increment,
`b_cliente` varchar(200) default NULL,
`b_direccion` varchar(200) default NULL,
`b_telefono` varchar(200) default NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

Mi pregunta es, se puede cargar registros y que mantenga el mismo id cuando el valor "b_cliente" es igual al ultimo "b_cliente" cargado?

Espero se entienda muchas gracias.-
__________________
Bye!
  #2 (permalink)  
Antiguo 11/01/2009, 03:53
Avatar de JavierB
Colaborador
 
Fecha de Ingreso: febrero-2002
Ubicación: Madrid
Mensajes: 25.052
Antigüedad: 22 años, 2 meses
Puntos: 772
Respuesta: Auto_increment salvo que...

Hola Pelao

Los campo auto_increment son "automáticos", no se puede elegir el valor que vas a añadir. Además es el campo clave, así que no se puede repetir.

Saludos,
  #3 (permalink)  
Antiguo 11/01/2009, 13:09
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Auto_increment salvo que...

Tema trasladado a Bases de Datos.
  #4 (permalink)  
Antiguo 11/01/2009, 13:36
 
Fecha de Ingreso: abril-2003
Mensajes: 260
Antigüedad: 21 años
Puntos: 1
Respuesta: Auto_increment salvo que...

Ok entiendo, y alguna sugerencia de como hacer lo que necesito?
__________________
Bye!
  #5 (permalink)  
Antiguo 30/01/2009, 21:06
 
Fecha de Ingreso: abril-2003
Mensajes: 260
Antigüedad: 21 años
Puntos: 1
Respuesta: Auto_increment salvo que...

ok y si se me ocurre agregar otra columna por ejemplo .."id2"...

CREATE TABLE IF NOT EXISTS `base` (
`id` int(7) NOT NULL auto_increment,
`id2` varchar(200) default NULL,
`b_cliente` varchar(200) default NULL,
`b_direccion` varchar(200) default NULL,
`b_telefono` varchar(200) default NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

hay alguna forma de hacer que mantenga el mismo id2 cuando el valor "b_cliente" es igual al ultimo "b_cliente" cargado?

gracias por su tiempo
__________________
Bye!
  #6 (permalink)  
Antiguo 31/01/2009, 05:35
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Auto_increment salvo que...

Empecemos por el principio: ID es PK y por tanto no se repite. Pero tú estás preguntado por b_cliente.
¿Qué representa ese campo?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 31/01/2009, 14:25
 
Fecha de Ingreso: abril-2003
Mensajes: 260
Antigüedad: 21 años
Puntos: 1
Respuesta: Auto_increment salvo que...

claro me han dicho que no se puede repetir el valor del campo id por ser PK...por eso cree un nuevo campo llamado "id2", con la idea de repetir ese valor en caso de que el campo "b_cliente" se repita al ultimo cargado.

gracias
__________________
Bye!
  #8 (permalink)  
Antiguo 31/01/2009, 15:11
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Auto_increment salvo que...

Me parece que estás planteando mal las cosas desde el inicio.
Cuando miro bien la estructura de la tabla, y analizo bien el post, tu problema no se origina en la repetición de un valor sino en que un cliente puede tener más de una dirección, único caso en que id y b_cliente pueden ser iguales entre registros distintos. Y ese problema no se resuelve ni remotamente agregando un campo más, sino que estás teniendo un problema de normalización: La tabla BASE debe ser dividida en dos tablas.
La cosa pasa porque tienes una relación de cardinalidad 1:N entre los clientes y las direcciones de los clientes. Para resolverlo debes crear una tabla direcciones que para simplificar debe tener su propia ID autoincremental, y su PK debe ser la combinación entre un campo dirección_id y Cliente_id. De esa forma a una ID de cliente pueden corresponder una o más ID de direcciones, pero una dirección puede corresponder a un sólo cliente (más alla de que diversos clientes tengan la misma dirección).
Obviamente es eficiente en tablas InnoDB y no en tablas MyISAM, pero desde la aplicación se puede gestionar el problema de las FK.
La cosa serían tablas mas o menos así:
Código sql:
Ver original
  1. CREATE TABLE IF NOT EXISTS `base` (
  2. `cliente_id` INT(10) NOT NULL AUTO_INCREMENT,
  3. `b_cliente` VARCHAR(200) DEFAULT NULL,
  4. PRIMARY KEY (`id`)
  5. ) ENGINE=MyISAM DEFAULT CHARSET=latin1 ;
  6.  
  7. CREATE TABLE IF NOT EXISTS `direccion` (
  8. `direccion_id` INT(10) NOT NULL AUTO_INCREMENT,
  9. `cliente_id` VARCHAR(200) DEFAULT NULL,
  10. `b_direccion` VARCHAR(200) DEFAULT NULL,
  11. `b_telefono` VARCHAR(200) DEFAULT NULL,
  12. PRIMARY KEY (`direccion_id`,`cliente_id`)
  13. ) ENGINE=MyISAM DEFAULT CHARSET=latin1;

Un tip final: No uses SMALLINT o MEDIUMINT para los ID. Puedes quedarte corto en cuanto a representación. dejalos como INT o BIGINT. Tienen mejor alcance.
Además, trata de ponerle a los ID un nombre de campo que te recuerde a que tabla pertenecen, después te resultará más fácil usar JOIN e INNER JOIN entre tablas relacionadas.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #9 (permalink)  
Antiguo 01/02/2009, 00:33
 
Fecha de Ingreso: abril-2003
Mensajes: 260
Antigüedad: 21 años
Puntos: 1
Respuesta: Auto_increment salvo que...

entiendo...pero lo mio es un poco mas complejo...

Esta tabla tiene una estructura un poco mas compleja...yo solo la resumi...
en defenitiva lo q hacen es mediante formularios cargar pedidos a esta tabla, la idea que cuando un mismo cliente
carga 2 pedidos seguidos...conserve el mismo valor de id (almacenadolo en id2)...para luego al facturar buscar por id2

no me sirve identificar a cada cliente con un id, por que la logica es facturar a medida q pasan los dias...
entonces cuando el cliente hace mas de un pedido en ese mismo dia tendria q conservar un mismo nro (en el campo id2).

es bastante complicado...nunca tuve q hacer algo asi.

Gracias nuevamente.
__________________
Bye!
  #10 (permalink)  
Antiguo 01/02/2009, 17:01
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Auto_increment salvo que...

Los principios de lo que estás diciendo y lo que yo te estoy proponiendo. Pero si el problema es que has resumido las estructuras para hacer la pregunta, entonces nos estás dando información incompleta para una pregunta que se debería responder de otra forma.
Yo te sugeriría que nos dieses un esquema del DER sobre el que se desarrolla esa base de datos, pero desde ya te digo que el esquema de pedidos - Clientes - Fechas, es un esquema estándar que tiene una fácil resolución, en tanto las se puedan resolver la cardinalidades de las relaciones intervinientes. Si se te está produciendo este inconveniente, es posible que esté faltando una entidad.
Postea el DER sobre el que trabajan, y veremos cuál es la solución más eficiente.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #11 (permalink)  
Antiguo 05/02/2009, 06:22
 
Fecha de Ingreso: abril-2003
Mensajes: 260
Antigüedad: 21 años
Puntos: 1
Respuesta: Auto_increment salvo que...

Ok aqui todo lo que puedo decir al respecto y de la mejor forma explicada:

La tabla actualmente tiene la siguiente estructura:

Código:
CREATE TABLE IF NOT EXISTS `base` (
`id` int(7) NOT NULL auto_increment,
`b_cliente` varchar(200) default NULL,
`b_direccion` varchar(200) default NULL,
`b_telefono` varchar(200) default NULL,
`b_formulario` varchar(200) default NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

Yo mediante un formulario con cada uno de estos campos, cargo los pedidos de los clientes, en donde el campo 'b_formulario' es lo que me solicitan (es un campo numerico).

Aveces los clientes llaman y piden el formulario 1 y 3 por ejemplo, entonces yo cargo 2 pedidos distintos (por que asi debe ser) marcando en uno el formulario nro 1 ...y en el otro el formulario nro 3.

Ahora cuando se da esta situacion yo necesito q haya un nro q se repita, para luego poder facturarlo junto.

Explico como:

Yo tengo una hoja donde al poner id (actualmente) me levanta el formulario solicitado (solo el nro) por el cliente con su valor en $.

La idea es que cuando un cliente hace mas de un pedido seguido mantenga alguna variable para facturarlos juntos, pero no me sirve q cada cliente sea un nro, por que de esa forma arrastraria un historico de cosas.

Muchas gracias!!!
__________________
Bye!
  #12 (permalink)  
Antiguo 05/02/2009, 17:21
 
Fecha de Ingreso: abril-2008
Ubicación: Rubí
Mensajes: 131
Antigüedad: 16 años
Puntos: 3
Respuesta: Auto_increment salvo que...

mmm llamame entrometido, pero, porque no te haces un diseño entidad relacion con sus cardinalidades, sus asociaciones y sus cositas? te aclararan bastante las ideas (y trabajo).

workbench (mysql), powerDesginer(mysql,oracle,sqls....)



salu2
  #13 (permalink)  
Antiguo 05/02/2009, 19:32
 
Fecha de Ingreso: abril-2003
Mensajes: 260
Antigüedad: 21 años
Puntos: 1
Respuesta: Auto_increment salvo que...

javin1 gracias por el aporte...no se mucho de bbdd...alguna sugerencia de como aplicarlo?

lei esto..pero no entendi mucho:

Aquí tienes una guía
http://dev.mysql.com/doc/refman/5.0/...nstraints.html

Pero también puedes usar MySQL Workbench para modelar tus datos, crear las relaciones y liego generar el script
http://dev.mysql.com/downloads/workbench/5.1.html
http://dev.mysql.com/doc/workbench/en/index.html (manual)

gracias por todo
__________________
Bye!
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:34.