Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   MySQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=21)
-   -   mysql no me permite agregar registros como duplicate entry.. (https://www.clubdelphi.com/foros/showthread.php?t=33682)

Arturo 13-07-2006 19:48:07

mysql no me permite agregar registros como duplicate entry..
 
saludos tengo un problema con mysql que no entiendo por que no me deja agregar registros en una tabla maestro/detalle, lo cual lo comprobe con mysql-front agregandole los regsitros: error de ejecucion sql 1062 respuesta de la bd duplicate entry '1' for key 1

Por tanto, ya no le aplico una primary key a mi tabla detalle, de lo cual modifique el script y quedando asi:
Código PHP:

CREATE TABLE `requision` (
  `
REQ_IDint(11NOT NULL default '0',
  `
REQ_FECHAdate default NULL,
  
PRIMARY KEY  (`REQ_ID`),
ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_spanish_ci;
  
  
CREATE TABLE `requision_det` (
  `
REQ_DET_IDint(11NOT NULL default '0', ---->(ya no hay Primary key)
  `
REQ_DET_ARTICULO int(11),
   KEY 
`REQ_DET_ID_IX` (`REQ_DET_ID`), -->un indice
  ) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_spanish_ci;
  
  ALTER TABLE 
`requision_det`  --->y le aplique una foranea 
  ADD FOREIGN KEY (
`REQ_DET_ID`) REFERENCES `requision` (`REQ_ID`) ON DELETE CASCADE ON UPDATE CASCADE, 

estoy en esa incertidumbre q- tengo, por que no me habia sucedido esto..
hice una pruebas y ya me permite agregar registros a mi detalle pero es bueno, recomendado... que hago
gracias.

AzidRain 24-07-2006 19:15:39

Recordando un poco de teoría veamos que:

Una clave primaria es la que identifica de manera unívoca a una tupla (fila o registro), es decir, no puede haber dos claves iguales. Por ejemplo: Si tenemos una entidad coches, sus propiedades podrian ser: marca, color, placas. Para identificar cada coche no podriamos utilizar ni marca ni color porque si puede haber varios coches de la misma marca o color o incluso de ambos. Sin embargo, la placa no puede repetirse, por lo que en este caso nuestra clave primaria seria esta. Hay casos en los que la clave primaria se puede componer de varios campos, por ejemplo: una factura tiene folio y numero de serie. Para identificar cada una la clave primaria se compondría por el folio Y la serie ya que pueden existir folios iguales con distinta serie.

En tu caso particular tenias erroneamente como clave primaria en la tabla de talle ID del maestro. Como ya vimos una clave primaria no puede repetirse, y en el caso de una tabla detalle, sabemos que es precisamente lo que sucede: debe repetirse tantas filas como se requiera para cada fila única de la tabla maestra. Sin embargo, aunque funciona bien como lo hiciste (sin clave primaria) ¿Como haces para identificar cada partida de forma individual? En este caso seria útil que añadieras un campo Num. o Num_partida en la tabla detalle y formaras la clave primaria con la combinacion de los campos ID+Num_Partida, de manera que solo pueda existir una combinacion para cada fila.

A mi me pasaba lo mismo cuando no acostumbraba hacer mucho análisis de datos antes de programar y terminé por mejor dedicarle mas tiempo a este análisis previo: definir entidades, propiedades, relaciones, etc. de manera que el código se hace mucho más sencillo y evitas estos problemas.

Te recomiendo que leas algun material sobre el Modelo E-R y Bases de datos relacionales. Si le interesa al foro en unos días posterare por aqui un manual de MySQL muy bueno que inicia desde esas bases.

SAludos y perdon por la extension...


La franja horaria es GMT +2. Ahora son las 02:04:37.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi