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

como admitir duplicidad

Estas en el tema de como admitir duplicidad en el foro de Mysql en Foros del Web. tengo esta base de datos, el INSERT en la tabla CLIENTES, cuando pongo el regitro: (1050204, 'GERMAN', 'RODRIGUEZ', 27155999), me da error, yo se que ...
  #1 (permalink)  
Antiguo 02/06/2012, 14:05
 
Fecha de Ingreso: agosto-2005
Mensajes: 97
Antigüedad: 19 años, 3 meses
Puntos: 1
como admitir duplicidad

tengo esta base de datos, el INSERT en la tabla CLIENTES, cuando pongo el regitro:
(1050204, 'GERMAN', 'RODRIGUEZ', 27155999), me da error, yo se que porque ya antes puse a esta persona con el mismo DNI, entonces al haber duplicidad da error, como hago entonces para que en la tabla CLIENTES se pueda admitir duplicidad, la base es esta:

el error es: #1452 - Cannot add or update a child row: a foreign key constraint fails (`aseguradora`.`clientes`, CONSTRAINT `clientes_ibfk_1` FOREIGN KEY (`DNI_IDDNI`) REFERENCES `dni` (`IDDNI`) ON DELETE CASCADE ON UPDATE CASCADE)


CREATE DATABASE IF NOT EXISTS aseguradora;
USE aseguradora;

CREATE TABLE DNI(
IDDNI INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
DNI INT UNSIGNED NOT NULL
);

/* INSERT DNI */
INSERT INTO DNI(DNI)
VALUES
(31052111),
(29015455),
(27155999),
(26653555),
(31548999),
(27055151),
(27666666);


CREATE TABLE CLIENTES(
NUMSEGURO INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
CLIENTENOMBRE VARCHAR (50),
CLIENTEAPELLIDO VARCHAR (50),
DNI_IDDNI INT UNSIGNED,
FOREIGN KEY (DNI_IDDNI) REFERENCES DNI(IDDNI)
ON DELETE CASCADE ON UPDATE CASCADE
);


/*INSERT CLIENTES */
INSERT INTO CLIENTES(NUMSEGURO, CLIENTENOMBRE, CLIENTEAPELLIDO, DNI_IDDNI)
VALUES
(1050201, 'IVAN', 'TROSIC', 31052111),
(1050202, 'NICOLAS', 'FERNANDEZ', 29015455),
(1050203, 'LAURA', 'GONZALEZ', 27155999),
(1050204, 'GERMAN', 'RODRIGUEZ', 2653555),
(1050205, 'GERMAN', 'RODRIGUEZ', 26653555),
(1050206, 'PABLO', 'FLORES', 31548999),
(1050207, 'LUCAS', 'DEL AGUILA', 27055151),
(1050208, 'DIEGO', 'SATELIER', 27666666);



CREATE TABLE AUTO (
IDAUTO INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
AUTO VARCHAR (20) NOT NULL,
CLIENTES_NUMSEGURO INT UNSIGNED,
FOREIGN KEY (CLIENTES_NUMSEGURO) REFERENCES CLIENTES (NUMSEGURO),
CLIENTES_DNI_IDDNI INT UNSIGNED,
FOREIGN KEY (CLIENTES_DNI_IDDNI) REFERENCES DNI(IDDNI)
ON DELETE CASCADE ON UPDATE CASCADE
);

CREATE TABLE VALOR(
IDVALOR INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
VALOR INT NOT NULL,
AUTO_IDAUTO INT UNSIGNED,
FOREIGN KEY(AUTO_IDAUTO) REFERENCES AUTO (IDAUTO)
ON DELETE CASCADE ON UPDATE CASCADE
);

CREATE TABLE PLAN(
IDPLAN INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
PLAN VARCHAR (20) NOT NULL,
AUTO_IDAUTO INT UNSIGNED,
FOREIGN KEY(AUTO_IDAUTO) REFERENCES AUTO (IDAUTO)
ON DELETE CASCADE ON UPDATE CASCADE
);

CREATE TABLE FECHA(
IDFECHA INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
FECHA DATE,
AUTO_IDAUTO INT UNSIGNED,
FOREIGN KEY(AUTO_IDAUTO) REFERENCES AUTO (IDAUTO)
ON DELETE CASCADE ON UPDATE CASCADE
);

Última edición por maire; 02/06/2012 a las 15:16
  #2 (permalink)  
Antiguo 02/06/2012, 15:45
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: como admitir duplicidad

Cita:
tengo esta base de datos, el INSERT en la tabla CLIENTES, cuando pongo el regitro:
(1050204, 'GERMAN', 'RODRIGUEZ', 27155999), me da error, yo se que porque ya antes puse a esta persona con el mismo DNI, entonces al haber duplicidad da error, como hago entonces para que en la tabla CLIENTES se pueda admitir duplicidad, la base es esta:
Empecemos por el principio: Si tienes dos personas distintas con el mismo DNI, lo que tienes en todo caso son personas de diferente país, y eso implica que el modelo de datos no está bien diseñado.
Pero si realmente tienes dos personas, del mismo país, con igual DNI, lo que tienes es un cliente que es un delincuente y está usando un documento falsificado.
La única otra posibilidad es que te hayas equivocado en alguno de las dos personas, y eso es un error de DataEntry, muy propio de seres humanos.
En cualquier caso el problema no se soluciona con la gigantesca pavada de permitir duplicidades de una clave (lo que te generaría errores de integridad referencial y consistencia de datos a escala monumental), antes bien se soluciona depurando al usuario cuyos datos están evidentemente mal, o rediseñando la base para que se considere la posibilidad de documentos de diferente tipo y origen.

¿Se comprende?

No es transformando tu base de datos en basura como se resuelve tu problema.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: duplicidad, tabla
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 11:40.