Ver Mensaje Individual
  #8 (permalink)  
Antiguo 31/01/2009, 15:11
Avatar de gnzsoloyo
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)