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

[SOLUCIONADO] no se como restringir entrada de datos

Estas en el tema de no se como restringir entrada de datos en el foro de Mysql en Foros del Web. tengo este esquema @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código MySQL: Ver original SET @OLD_UNIQUE_CHECKS = @@UNIQUE_CHECKS , UNIQUE_CHECKS = 0 ; SET @OLD_FOREIGN_KEY_CHECKS = @@FOREIGN_KEY_CHECKS , FOREIGN_KEY_CHECKS = ...
  #1 (permalink)  
Antiguo 11/12/2014, 01:34
 
Fecha de Ingreso: noviembre-2014
Mensajes: 76
Antigüedad: 9 años, 5 meses
Puntos: 0
no se como restringir entrada de datos

tengo este esquema

Código MySQL:
Ver original
  1. SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
  2. SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
  3. SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES';
  4.  
  5. CREATE SCHEMA IF NOT EXISTS `stocklentesbrujuleando` DEFAULT CHARACTER SET utf8 ;
  6. USE `stocklentesbrujuleando` ;
  7.  
  8. -- -----------------------------------------------------
  9. -- Table `stocklentesbrujuleando`.`cilindro`
  10. -- -----------------------------------------------------
  11. CREATE  TABLE IF NOT EXISTS `stocklentesbrujuleando`.`cilindro` (
  12.   `ID_cil` INT(2) NOT NULL AUTO_INCREMENT ,
  13.   `cilindro` DECIMAL(5,2) NOT NULL ,
  14.   PRIMARY KEY (`ID_cil`) )
  15. DEFAULT CHARACTER SET = utf8;
  16.  
  17.  
  18. -- -----------------------------------------------------
  19. -- Table `stocklentesbrujuleando`.`esfera`
  20. -- -----------------------------------------------------
  21. CREATE  TABLE IF NOT EXISTS `stocklentesbrujuleando`.`esfera` (
  22.   `ID_esf` INT(5) NOT NULL AUTO_INCREMENT ,
  23.   `esfera` DECIMAL(5,2) NOT NULL ,
  24.   PRIMARY KEY (`ID_esf`) )
  25. DEFAULT CHARACTER SET = utf8;
  26.  
  27.  
  28. -- -----------------------------------------------------
  29. -- Table `stocklentesbrujuleando`.`lentes`
  30. -- -----------------------------------------------------
  31. CREATE  TABLE IF NOT EXISTS `stocklentesbrujuleando`.`lentes` (
  32.   `ID_lente` INT(2) NOT NULL AUTO_INCREMENT ,
  33.   `lente` VARCHAR(25) NOT NULL ,
  34.   `desc` VARCHAR(45) NOT NULL ,
  35.   `Abbe` INT(2) NOT NULL ,
  36.   `densidad` VARCHAR(15) NOT NULL ,
  37.   `geometría` VARCHAR(15) NOT NULL ,
  38.   PRIMARY KEY (`ID_lente`) ,
  39.   UNIQUE INDEX `tipo` (`lente` ASC) )
  40. DEFAULT CHARACTER SET = utf8;
  41.  
  42.  
  43. -- -----------------------------------------------------
  44. -- Table `stocklentesbrujuleando`.`rx`
  45. -- -----------------------------------------------------
  46. CREATE  TABLE IF NOT EXISTS `stocklentesbrujuleando`.`rx` (
  47.   `Id_Rx` INT(2) NOT NULL DEFAULT '0' ,
  48.   `id_cil` INT(2) NOT NULL ,
  49.   `id_esf` INT(5) NOT NULL ,
  50.   PRIMARY KEY (`Id_Rx`) ,
  51.   INDEX `fk_rx_cilindro1_idx` (`id_cil` ASC) ,
  52.   INDEX `fk_rx_esfera1_idx` (`id_esf` ASC) ,
  53.   CONSTRAINT `fk_rx_cilindro1`
  54.     FOREIGN KEY (`id_cil` )
  55.     REFERENCES `stocklentesbrujuleando`.`cilindro` (`ID_cil` )
  56.   CONSTRAINT `fk_rx_esfera1`
  57.     FOREIGN KEY (`id_esf` )
  58.     REFERENCES `stocklentesbrujuleando`.`esfera` (`ID_esf` )
  59. DEFAULT CHARACTER SET = utf8;
  60.  
  61.  
  62. -- -----------------------------------------------------
  63. -- Table `stocklentesbrujuleando`.`item`
  64. -- -----------------------------------------------------
  65. CREATE  TABLE IF NOT EXISTS `stocklentesbrujuleando`.`item` (
  66.   `item_ID` INT(5) NOT NULL AUTO_INCREMENT ,
  67.   `id_rx` INT(2) NOT NULL ,
  68.   `id_lente` INT(2) NOT NULL ,
  69.   PRIMARY KEY (`item_ID`) ,
  70.   INDEX `fk_item_lentes1_idx` (`id_lente` ASC) ,
  71.   INDEX `fk_item_rx1_idx` (`id_rx` ASC) ,
  72.   CONSTRAINT `fk_item_lentes1`
  73.     FOREIGN KEY (`id_lente` )
  74.     REFERENCES `stocklentesbrujuleando`.`lentes` (`ID_lente` )
  75.   CONSTRAINT `fk_item_rx1`
  76.     FOREIGN KEY (`id_rx` )
  77.     REFERENCES `stocklentesbrujuleando`.`rx` (`Id_Rx` )
  78. DEFAULT CHARACTER SET = utf8;
  79.  
  80.  
  81. -- -----------------------------------------------------
  82. -- Table `stocklentesbrujuleando`.`movimiento`
  83. -- -----------------------------------------------------
  84. CREATE  TABLE IF NOT EXISTS `stocklentesbrujuleando`.`movimiento` (
  85.   `venta` INT(5) UNSIGNED NULL ,
  86.   `compra` INT(5) UNSIGNED NULL ,
  87.   `taller` INT(5) UNSIGNED NULL ,
  88.   `regula_mas` INT(5) UNSIGNED NULL ,
  89.   `regula_menos` INT(5) UNSIGNED NULL ,
  90.   `fecha` TIMESTAMP NOT NULL ,
  91.   `id_item` INT(5) NOT NULL ,
  92.   `id_lente` INT(2) NULL ,
  93.   `id_cilindro` INT(2) NULL ,
  94.   `id_esfera` INT(5) NULL ,
  95.   PRIMARY KEY (`id_mov`) ,
  96.   INDEX `fk_salida_item1_idx` (`id_item` ASC) ,
  97.   INDEX `fk_movimiento_lentes1_idx` (`id_lente` ASC) ,
  98.   INDEX `fk_movimiento_cilindro1_idx` (`id_cilindro` ASC) ,
  99.   INDEX `fk_movimiento_esfera1_idx` (`id_esfera` ASC) ,
  100.   CONSTRAINT `fk_salida_item1`
  101.     FOREIGN KEY (`id_item` )
  102.     REFERENCES `stocklentesbrujuleando`.`item` (`item_ID` )
  103.   CONSTRAINT `fk_movimiento_lentes1`
  104.     FOREIGN KEY (`id_lente` )
  105.     REFERENCES `stocklentesbrujuleando`.`lentes` (`ID_lente` )
  106.   CONSTRAINT `fk_movimiento_cilindro1`
  107.     FOREIGN KEY (`id_cilindro` )
  108.     REFERENCES `stocklentesbrujuleando`.`cilindro` (`ID_cil` )
  109.   CONSTRAINT `fk_movimiento_esfera1`
  110.     FOREIGN KEY (`id_esfera` )
  111.     REFERENCES `stocklentesbrujuleando`.`esfera` (`ID_esf` )
  112. DEFAULT CHARACTER SET = utf8;
  113.  
  114.  
  115.  
  116. SET SQL_MODE=@OLD_SQL_MODE;
  117. SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
  118. SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;

las tablas esfera, cilindro, rx, item, lentes pobladas.

ahora estoy probando la tabla movimientos y si intento introducir un item que no existe en la tabla item, este entra igual, cómo debería hacer para evitar esto?
  #2 (permalink)  
Antiguo 11/12/2014, 04:14
 
Fecha de Ingreso: noviembre-2014
Mensajes: 76
Antigüedad: 9 años, 5 meses
Puntos: 0
cómo insertar datos en una tabla

formada por id´s, necesitaría saber más datos porque por id´s es harto complicado.

Código MySQL:
Ver original
  1. id_salida   int(5) unsigned NO  PRI     auto_increment
  2. venta   int(5) unsigned YES        
  3. compra  int(5) unsigned YES        
  4. taller  int(5) unsigned YES        
  5. regula_mas  int(5) unsigned YES        
  6. regula_menos    int(5) unsigned YES        
  7. id_item int(5)  NO  MUL    
  8. id_lente    int(2)  YES MUL    
  9. id_cilindro int(2)  YES MUL    
  10. id_esfera   int(5)  YES MUL

esta es la tabla en cuestion

que sería tipo
.....


insert los campos que quiero desde una select que me diera por ejemplo el tipo de lente desde el id_lente y lo mismo con id_esfera e id_cilindro?

Última edición por gralf; 11/12/2014 a las 04:21
  #3 (permalink)  
Antiguo 11/12/2014, 05:53
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: no se como restringir entrada de datos

Cita:
insert los campos que quiero desde una select que me diera por ejemplo el tipo de lente desde el id_lente y lo mismo con id_esfera e id_cilindro?
Explicate mejor: ¿Select de una consulta o selector de un formulario?
Pareces referirte a lo segundo...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #4 (permalink)  
Antiguo 11/12/2014, 05:58
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: no se como restringir entrada de datos

Cita:
Iniciado por gralf Ver Mensaje
las tablas esfera, cilindro, rx, item, lentes pobladas.

ahora estoy probando la tabla movimientos y si intento introducir un item que no existe en la tabla item, este entra igual, cómo debería hacer para evitar esto?
Normalmente eso implciaría que tienes datos que desconoces...
Si existe la restriccion, entonces debería dispararse, pero hay que verificarlo manualmente para asegurarse de que no hay aerrores volcados por programación.

Prueba a mano, previo asegurarte de que el dato que pones no exista en la tabla referida. Suponerlo no es suficiente. Debes comprobarlo.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 11/12/2014, 06:00
 
Fecha de Ingreso: noviembre-2014
Mensajes: 76
Antigüedad: 9 años, 5 meses
Puntos: 0
Respuesta: no se como restringir entrada de datos

mi intencion es insertar datos en esta tabla, pero los datos importantes aparecen como id´s lo que pretendo es introducir los datos pero sabiendo al dato a que se refiere cada id, voy a poner la estructura para explicarme mejor

Código MySQL:
Ver original
  1. -- --------------------------------------------------------
  2.  
  3. --
  4. -- Table structure for table `cilindro`
  5. --
  6.  
  7. CREATE TABLE `cilindro` (
  8.   `id_cil` int(2) NOT NULL AUTO_INCREMENT,
  9.   `cilindro` decimal(5,2) NOT NULL,
  10.   PRIMARY KEY (`id_cil`)
  11.  
  12. -- --------------------------------------------------------
  13.  
  14. --
  15. -- Table structure for table `esfera`
  16. --
  17.  
  18. CREATE TABLE `esfera` (
  19.   `id_esf` int(5) NOT NULL AUTO_INCREMENT,
  20.   `esfera` decimal(5,2) NOT NULL,
  21.   PRIMARY KEY (`id_esf`)
  22.  
  23. -- --------------------------------------------------------
  24.  
  25. --
  26. -- Table structure for table `item`
  27. --
  28.  
  29. CREATE TABLE `item` (
  30.   `id_item` int(5) NOT NULL AUTO_INCREMENT,
  31.   `id_rx` int(2) NOT NULL,
  32.   `id_lente` int(2) NOT NULL,
  33.   `movimiento_id_mov` int(5) unsigned DEFAULT NULL,
  34.   PRIMARY KEY (`id_item`),
  35.   KEY `fk_item_lentes1_idx` (`id_lente`),
  36.   KEY `fk_item_rx1_idx` (`id_rx`)
  37.  
  38. -- --------------------------------------------------------
  39.  
  40. --
  41. -- Table structure for table `lentes`
  42. --
  43.  
  44. CREATE TABLE `lentes` (
  45.   `id_lente` int(2) NOT NULL AUTO_INCREMENT,
  46.   `lente` varchar(25) NOT NULL,
  47.   `desc` varchar(45) NOT NULL,
  48.   `Abbe` int(2) NOT NULL,
  49.   `densidad` varchar(15) NOT NULL,
  50.   `geometría` varchar(15) NOT NULL,
  51.   `id_item` int(5) NOT NULL,
  52.   PRIMARY KEY (`id_lente`),
  53.   UNIQUE KEY `tipo` (`lente`),
  54.   KEY `fk_lentes_item_idx` (`id_item`)
  55.  
  56. -- --------------------------------------------------------
  57.  
  58. --
  59. -- Table structure for table `movimiento`
  60. --
  61.  
  62. CREATE TABLE `movimiento` (
  63.   `id_salida` int(5) unsigned NOT NULL AUTO_INCREMENT,
  64.   `venta` int(5) unsigned DEFAULT NULL,
  65.   `compra` int(5) unsigned DEFAULT NULL,
  66.   `taller` int(5) unsigned DEFAULT NULL,
  67.   `regula_mas` int(5) unsigned DEFAULT NULL,
  68.   `regula_menos` int(5) unsigned DEFAULT NULL,
  69.   `id_item` int(5) NOT NULL,
  70.   `id_lente` int(2) DEFAULT NULL,
  71.   `id_cilindro` int(2) DEFAULT NULL,
  72.   `id_esfera` int(5) DEFAULT NULL,
  73.   PRIMARY KEY (`id_salida`),
  74.   KEY `fk_movimiento_cilindro1_idx` (`id_cilindro`),
  75.   KEY `fk_movimiento_esfera1_idx` (`id_esfera`),
  76.   KEY `fk_movimiento_lentes1` (`id_lente`),
  77.   KEY `fk_salida_item1_idx` (`id_item`)
  78.  
  79. -- --------------------------------------------------------
  80.  
  81. --
  82. -- Table structure for table `rx`
  83. --
  84.  
  85. CREATE TABLE `rx` (
  86.   `Id_rx` int(2) NOT NULL AUTO_INCREMENT,
  87.   `id_cil` int(2) NOT NULL,
  88.   `id_esf` int(5) NOT NULL,
  89.   PRIMARY KEY (`Id_rx`),
  90.   KEY `fk_rx_cilindro1_idx` (`id_cil`),
  91.   KEY `fk_rx_esfera1_idx` (`id_esf`)

bueno pues para introducir un id_item en movimientos me convendría (bueno es que no queda otra porque la tabla item tendrá miles de entradas) saber el lentes.lente, el cilindro.cilindro y el esfera.esfera

no se si me he explicado bien.
  #6 (permalink)  
Antiguo 11/12/2014, 06:09
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: no se como restringir entrada de datos

Cita:
mi intencion es insertar datos en esta tabla, pero los datos importantes aparecen como id´s lo que pretendo es introducir los datos pero sabiendo al dato a que se refiere cada id
Bueno, eso es tarea de desarrollo... Tu ya conoces tu estructura, y sabes cómo se componen tus datos. A partir de eso realizas toda la lógica necesaria para que los datos obtenidos se correspondan con los que debes ingresar... No hay mucha técnica ni ayudas en esto, dependen de ti.
Para que se entienda: Cuando vas a recolectar los datos para un único registro de movimiento, el usuario debe poder elegir en la interfaz (el formulario) los datos adecuados, los cuales se muestran de modo comprensible. Pero internamente esos mismos datos la aplicación los tiene identificados por ID, aunque en ocasiones no los muestre al usuario), Esos valores son los que el sistema maneja y envía a la base para crear el registro.
No necesariamente debes memorizar todos los IDs, pero el usuario debe poder elegir de modo comprensible lo que desea y eres tu el que debe programar lo que se necesita para que a partir de esa selección el sistema recopile (como dije), el conjunto de datos necesarios.

¿Se entiende?

No te olvides que el usuario jamás ve las tablas, no las tiene que ver, y no tiene por qué saber que existen. Eso está detrás de la capa de usuario y de negocio.
__________________
¿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 11/12/2014, 06:51
 
Fecha de Ingreso: noviembre-2014
Mensajes: 76
Antigüedad: 9 años, 5 meses
Puntos: 0
Respuesta: no se como restringir entrada de datos

entiendo que esto tendré que programarlo en la interfaz web ¿no? porque hacerlo por ejemplo via phpadmin o workbench es el trabajo del chino, verdad?
  #8 (permalink)  
Antiguo 11/12/2014, 08:09
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: no se como restringir entrada de datos

phpMyadmin no es una interfaz de programación. Es una interfaz de adminsitración de MySQL programada en PHP.

MySQL Workbench es una interfaz de administración de MySQL, y no se usa para programar en PHP.

Te recomiendo que si vas a programar en PHP preguntes en el foro de PHP, que es donde te pueden orientar en programación. Ese tema es OFF TOPIC en este foro, acá sólo miramos las soluciones de SQL.
__________________
¿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 11/12/2014, 12:58
 
Fecha de Ingreso: noviembre-2014
Mensajes: 76
Antigüedad: 9 años, 5 meses
Puntos: 0
Respuesta: no se como restringir entrada de datos

Cita:
Iniciado por gnzsoloyo Ver Mensaje
phpMyadmin no es una interfaz de programación. Es una interfaz de adminsitración de MySQL programada en PHP.

MySQL Workbench es una interfaz de administración de MySQL, y no se usa para programar en PHP.

Te recomiendo que si vas a programar en PHP preguntes en el foro de PHP, que es donde te pueden orientar en programación. Ese tema es OFF TOPIC en este foro, acá sólo miramos las soluciones de SQL.
No, si ya se que ninguno de los dos son interfaces de programación; me refería a que la introduccion de datos desde cualquiera de los dos administradores sería tedioso.

Gracias de todos modos por la repuesta.
  #10 (permalink)  
Antiguo 12/12/2014, 00:44
 
Fecha de Ingreso: noviembre-2014
Mensajes: 76
Antigüedad: 9 años, 5 meses
Puntos: 0
Respuesta: no se como restringir entrada de datos

bueno respecto la restriccion dee datos, como debería hacer para que no se puedan insertar datos en movimiento de un item.id_item que no existe?
  #11 (permalink)  
Antiguo 12/12/2014, 03:30
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: no se como restringir entrada de datos

Para la inserciónde datos tendrás que crear tu propia aplicación, eso es inevitable.
Respecto al problema de insertar algo que aparentemente no existeen la tabla referida, eso tiene en aspecto de ser un problema con datos que existen ahora en la tabla. Por eso te recomendé que revisaras los datos de las tablas en cuestión.
Para mí es probable que existan. De todos modos necesitarámos hacer algunas pruebas para verificar, porque por la definición que muestras de las tablas, eso no debería estar pasando.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #12 (permalink)  
Antiguo 12/12/2014, 03:37
 
Fecha de Ingreso: noviembre-2014
Mensajes: 76
Antigüedad: 9 años, 5 meses
Puntos: 0
Respuesta: no se como restringir entrada de datos

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Para la inserciónde datos tendrás que crear tu propia aplicación, eso es inevitable.
Respecto al problema de insertar algo que aparentemente no existeen la tabla referida, eso tiene en aspecto de ser un problema con datos que existen ahora en la tabla. Por eso te recomendé que revisaras los datos de las tablas en cuestión.
Para mí es probable que existan. De todos modos necesitarámos hacer algunas pruebas para verificar, porque por la definición que muestras de las tablas, eso no debería estar pasando.
si, lo de la aplicación, está asumido.

rspecto de la inserción de datos, se trata en cuestión de que quiero introducir un movimiento en movimiento, por ejemplo una compra de 100 articulos con id_item 4000, id_item que no existe en la tabla item, puesto que esta tabla está poblada de 0 como hablamos ayer, y los id´s van del 1 al 3673
  #13 (permalink)  
Antiguo 12/12/2014, 05:06
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: no se como restringir entrada de datos

Después de estos últimos posts volví a revisar la estructura de tablas que postaste al final, y tienes esto:
Código MySQL:
Ver original
  1. CREATE TABLE `movimiento` (
  2.   `id_salida` int(5) unsigned NOT NULL AUTO_INCREMENT,
  3.   `venta` int(5) unsigned DEFAULT NULL,
  4.   `compra` int(5) unsigned DEFAULT NULL,
  5.   `taller` int(5) unsigned DEFAULT NULL,
  6.   `regula_mas` int(5) unsigned DEFAULT NULL,
  7.   `regula_menos` int(5) unsigned DEFAULT NULL,
  8.   `id_item` int(5) NOT NULL,
  9.   `id_lente` int(2) DEFAULT NULL,
  10.   `id_cilindro` int(2) DEFAULT NULL,
  11.   `id_esfera` int(5) DEFAULT NULL,
  12.   PRIMARY KEY (`id_salida`),
  13.   KEY `fk_movimiento_cilindro1_idx` (`id_cilindro`),
  14.   KEY `fk_movimiento_esfera1_idx` (`id_esfera`),
  15.   KEY `fk_movimiento_lentes1` (`id_lente`),
  16.   KEY `fk_salida_item1_idx` (`id_item`)
¿Me puedes explicar cómo crees que va a hacer validación de integridad referencial si alli no hay ninguna FOREIGN KEY?

Sin embargo, en tu primer script de backup tienes esto:
Código MySQL:
Ver original
  1. -- -----------------------------------------------------
  2. -- Table `stocklentesbrujuleando`.`movimiento`
  3. -- -----------------------------------------------------
  4. CREATE  TABLE IF NOT EXISTS `stocklentesbrujuleando`.`movimiento` (
  5.   `venta` INT(5) UNSIGNED NULL ,
  6.   `compra` INT(5) UNSIGNED NULL ,
  7.   `taller` INT(5) UNSIGNED NULL ,
  8.   `regula_mas` INT(5) UNSIGNED NULL ,
  9.   `regula_menos` INT(5) UNSIGNED NULL ,
  10.   `fecha` TIMESTAMP NOT NULL ,
  11.   `id_item` INT(5) NOT NULL ,
  12.   `id_lente` INT(2) NULL ,
  13.   `id_cilindro` INT(2) NULL ,
  14.   `id_esfera` INT(5) NULL ,
  15.   PRIMARY KEY (`id_mov`) ,
  16.   INDEX `fk_salida_item1_idx` (`id_item` ASC) ,
  17.   INDEX `fk_movimiento_lentes1_idx` (`id_lente` ASC) ,
  18.   INDEX `fk_movimiento_cilindro1_idx` (`id_cilindro` ASC) ,
  19.   INDEX `fk_movimiento_esfera1_idx` (`id_esfera` ASC) ,
  20.   CONSTRAINT `fk_salida_item1`
  21.     FOREIGN KEY (`id_item` )
  22.     REFERENCES `stocklentesbrujuleando`.`item` (`item_ID` )
  23.   CONSTRAINT `fk_movimiento_lentes1`
  24.     FOREIGN KEY (`id_lente` )
  25.     REFERENCES `stocklentesbrujuleando`.`lentes` (`ID_lente` )
  26.   CONSTRAINT `fk_movimiento_cilindro1`
  27.     FOREIGN KEY (`id_cilindro` )
  28.     REFERENCES `stocklentesbrujuleando`.`cilindro` (`ID_cil` )
  29.   CONSTRAINT `fk_movimiento_esfera1`
  30.     FOREIGN KEY (`id_esfera` )
  31.     REFERENCES `stocklentesbrujuleando`.`esfera` (`ID_esf` )
  32. DEFAULT CHARACTER SET = utf8;

Esto sí está bien.

¿Qué hiciste que se eliminaron todas las FK?

En esas condiciones la integridad referencial no existe. Las tablas se están comportando como si fuesen MyISAM, y no InnoDB.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #14 (permalink)  
Antiguo 12/12/2014, 05:23
 
Fecha de Ingreso: noviembre-2014
Mensajes: 76
Antigüedad: 9 años, 5 meses
Puntos: 0
Respuesta: no se como restringir entrada de datos

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Después de estos últimos posts volví a revisar la estructura de tablas que postaste al final, y tienes esto:
Código MySQL:
Ver original
  1. CREATE TABLE `movimiento` (
  2.   `id_salida` int(5) unsigned NOT NULL AUTO_INCREMENT,
  3.   `venta` int(5) unsigned DEFAULT NULL,
  4.   `compra` int(5) unsigned DEFAULT NULL,
  5.   `taller` int(5) unsigned DEFAULT NULL,
  6.   `regula_mas` int(5) unsigned DEFAULT NULL,
  7.   `regula_menos` int(5) unsigned DEFAULT NULL,
  8.   `id_item` int(5) NOT NULL,
  9.   `id_lente` int(2) DEFAULT NULL,
  10.   `id_cilindro` int(2) DEFAULT NULL,
  11.   `id_esfera` int(5) DEFAULT NULL,
  12.   PRIMARY KEY (`id_salida`),
  13.   KEY `fk_movimiento_cilindro1_idx` (`id_cilindro`),
  14.   KEY `fk_movimiento_esfera1_idx` (`id_esfera`),
  15.   KEY `fk_movimiento_lentes1` (`id_lente`),
  16.   KEY `fk_salida_item1_idx` (`id_item`)
¿Me puedes explicar cómo crees que va a hacer validación de integridad referencial si alli no hay ninguna FOREIGN KEY?

Sin embargo, en tu primer script de backup tienes esto:
Código MySQL:
Ver original
  1. -- -----------------------------------------------------
  2. -- Table `stocklentesbrujuleando`.`movimiento`
  3. -- -----------------------------------------------------
  4. CREATE  TABLE IF NOT EXISTS `stocklentesbrujuleando`.`movimiento` (
  5.   `venta` INT(5) UNSIGNED NULL ,
  6.   `compra` INT(5) UNSIGNED NULL ,
  7.   `taller` INT(5) UNSIGNED NULL ,
  8.   `regula_mas` INT(5) UNSIGNED NULL ,
  9.   `regula_menos` INT(5) UNSIGNED NULL ,
  10.   `fecha` TIMESTAMP NOT NULL ,
  11.   `id_item` INT(5) NOT NULL ,
  12.   `id_lente` INT(2) NULL ,
  13.   `id_cilindro` INT(2) NULL ,
  14.   `id_esfera` INT(5) NULL ,
  15.   PRIMARY KEY (`id_mov`) ,
  16.   INDEX `fk_salida_item1_idx` (`id_item` ASC) ,
  17.   INDEX `fk_movimiento_lentes1_idx` (`id_lente` ASC) ,
  18.   INDEX `fk_movimiento_cilindro1_idx` (`id_cilindro` ASC) ,
  19.   INDEX `fk_movimiento_esfera1_idx` (`id_esfera` ASC) ,
  20.   CONSTRAINT `fk_salida_item1`
  21.     FOREIGN KEY (`id_item` )
  22.     REFERENCES `stocklentesbrujuleando`.`item` (`item_ID` )
  23.   CONSTRAINT `fk_movimiento_lentes1`
  24.     FOREIGN KEY (`id_lente` )
  25.     REFERENCES `stocklentesbrujuleando`.`lentes` (`ID_lente` )
  26.   CONSTRAINT `fk_movimiento_cilindro1`
  27.     FOREIGN KEY (`id_cilindro` )
  28.     REFERENCES `stocklentesbrujuleando`.`cilindro` (`ID_cil` )
  29.   CONSTRAINT `fk_movimiento_esfera1`
  30.     FOREIGN KEY (`id_esfera` )
  31.     REFERENCES `stocklentesbrujuleando`.`esfera` (`ID_esf` )
  32. DEFAULT CHARACTER SET = utf8;

Esto sí está bien.
¿Qué hiciste que se eliminaron todas las FK?
ya se que pasa, que desde phpmyadmin exporto copias regularmente, cuando trunu´q para vaciar comencé con un nuevo esquema, y claro, no me ha añadido las fk, vaya lio, voy a ver si lo arreglo, y vuelvo a la carga

gracias

Última edición por gnzsoloyo; 12/12/2014 a las 05:32
  #15 (permalink)  
Antiguo 12/12/2014, 06:29
 
Fecha de Ingreso: noviembre-2014
Mensajes: 76
Antigüedad: 9 años, 5 meses
Puntos: 0
Respuesta: no se como restringir entrada de datos

vaya pues debe ser un error mio, si que exporta las fk, ya lo tengo arreglado


Código MySQL:
Ver original
  1. -- phpMyAdmin SQL Dump
  2. -- version 2.10.3
  3. -- http://www.phpmyadmin.net
  4. --
  5. -- Host: localhost
  6. -- Generation Time: Dec 12, 2014 at 01:21 PM
  7. -- Server version: 5.5.28
  8. -- PHP Version: 5.3.26
  9.  
  10. SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
  11.  
  12. --
  13. -- Database: `stocklentesbrujuleando3`
  14. --
  15.  
  16. -- --------------------------------------------------------
  17.  
  18. --
  19. -- Table structure for table `cilindro`
  20. --
  21.  
  22. CREATE TABLE `cilindro` (
  23.   `id_cil` int(2) NOT NULL AUTO_INCREMENT,
  24.   `cilindro` decimal(5,2) NOT NULL,
  25.   PRIMARY KEY (`id_cil`)
  26.  
  27. -- --------------------------------------------------------
  28.  
  29. --
  30. -- Table structure for table `esfera`
  31. --
  32.  
  33. CREATE TABLE `esfera` (
  34.   `id_esf` int(5) NOT NULL AUTO_INCREMENT,
  35.   `esfera` decimal(5,2) NOT NULL,
  36.   PRIMARY KEY (`id_esf`)
  37.  
  38. -- --------------------------------------------------------
  39.  
  40. --
  41. -- Table structure for table `item`
  42. --
  43.  
  44. CREATE TABLE `item` (
  45.   `id_item` int(5) NOT NULL AUTO_INCREMENT,
  46.   `id_rx` int(2) NOT NULL,
  47.   `id_lente` int(2) NOT NULL,
  48.   `movimiento_id_mov` int(5) unsigned DEFAULT NULL,
  49.   PRIMARY KEY (`id_item`),
  50.   KEY `fk_item_lentes1_idx` (`id_lente`),
  51.   KEY `fk_item_rx1_idx` (`id_rx`)
  52.  
  53. -- --------------------------------------------------------
  54.  
  55. --
  56. -- Table structure for table `lentes`
  57. --
  58.  
  59. CREATE TABLE `lentes` (
  60.   `id_lente` int(2) NOT NULL AUTO_INCREMENT,
  61.   `lente` varchar(25) NOT NULL,
  62.   `desc` varchar(45) NOT NULL,
  63.   `Abbe` int(2) NOT NULL,
  64.   `densidad` varchar(15) NOT NULL,
  65.   `geometría` varchar(15) NOT NULL,
  66.   `id_item` int(5) NOT NULL,
  67.   PRIMARY KEY (`id_lente`),
  68.   UNIQUE KEY `tipo` (`lente`),
  69.   KEY `fk_lentes_item_idx` (`id_item`)
  70.  
  71. -- --------------------------------------------------------
  72.  
  73. --
  74. -- Table structure for table `movimiento`
  75. --
  76.  
  77. CREATE TABLE `movimiento` (
  78.   `venta` int(5) unsigned DEFAULT NULL,
  79.   `compra` int(5) unsigned DEFAULT NULL,
  80.   `taller` int(5) unsigned DEFAULT NULL,
  81.   `regula_mas` int(5) unsigned DEFAULT NULL,
  82.   `regula_menos` int(5) unsigned DEFAULT NULL,
  83.   `id_item` int(5) NOT NULL,
  84.   `id_lente` int(2) DEFAULT NULL,
  85.   `id_cilindro` int(2) DEFAULT NULL,
  86.   `id_esfera` int(5) DEFAULT NULL,
  87.   PRIMARY KEY (`id_mov`),
  88.   KEY `fk_movimiento_cilindro1_idx` (`id_cilindro`),
  89.   KEY `fk_movimiento_esfera1_idx` (`id_esfera`),
  90.   KEY `fk_movimiento_lentes1` (`id_lente`),
  91.   KEY `fk_salida_item1_idx` (`id_item`)
  92.  
  93. -- --------------------------------------------------------
  94.  
  95. --
  96. -- Table structure for table `rx`
  97. --
  98.  
  99. CREATE TABLE `rx` (
  100.   `Id_rx` int(2) NOT NULL AUTO_INCREMENT,
  101.   `id_cil` int(2) NOT NULL,
  102.   `id_esf` int(5) NOT NULL,
  103.   PRIMARY KEY (`Id_rx`),
  104.   KEY `fk_rx_cilindro1_idx` (`id_cil`),
  105.   KEY `fk_rx_esfera1_idx` (`id_esf`)
  106.  
  107. --
  108. -- Constraints for dumped tables
  109. --
  110.  
  111. --
  112. -- Constraints for table `item`
  113. --
  114. ALTER TABLE `item`
  115.   ADD CONSTRAINT `fk_item_lentes1` FOREIGN KEY (`id_lente`) REFERENCES `lentes` (`id_lente`) ON DELETE NO ACTION ON UPDATE NO ACTION,
  116.   ADD CONSTRAINT `fk_item_rx1` FOREIGN KEY (`id_rx`) REFERENCES `rx` (`Id_rx`) ON DELETE NO ACTION ON UPDATE NO ACTION;
  117.  
  118. --
  119. -- Constraints for table `movimiento`
  120. --
  121. ALTER TABLE `movimiento`
  122.   ADD CONSTRAINT `fk_movimiento_cilindro1` FOREIGN KEY (`id_cilindro`) REFERENCES `cilindro` (`id_cil`) ON DELETE NO ACTION ON UPDATE NO ACTION,
  123.   ADD CONSTRAINT `fk_movimiento_esfera1` FOREIGN KEY (`id_esfera`) REFERENCES `esfera` (`id_esf`) ON DELETE NO ACTION ON UPDATE NO ACTION,
  124.   ADD CONSTRAINT `fk_movimiento_lentes1` FOREIGN KEY (`id_lente`) REFERENCES `lentes` (`id_lente`) ON DELETE NO ACTION ON UPDATE NO ACTION;
  125.  
  126. --
  127. -- Constraints for table `rx`
  128. --
  129.   ADD CONSTRAINT `fk_rx_cilindro1` FOREIGN KEY (`id_cil`) REFERENCES `cilindro` (`id_cil`) ON DELETE NO ACTION ON UPDATE NO ACTION,
  130.   ADD CONSTRAINT `fk_rx_esfera1` FOREIGN KEY (`id_esf`) REFERENCES `esfera` (`id_esf`) ON DELETE NO ACTION ON UPDATE NO ACTION;




pero sigo pudiendo meter un movimiento.id_item 4000 y este id no existe en la tabla item
  #16 (permalink)  
Antiguo 12/12/2014, 06:44
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: no se como restringir entrada de datos

Cita:
pero sigo pudiendo meter un movimiento.id_item 4000 y este id no existe en la tabla item
TE sigue faltando la FK de id_item:

Código MySQL:
Ver original
  1. ALTER TABLE `movimiento`
  2.   ADD CONSTRAINT `fk_movimiento_cilindro1` FOREIGN KEY (`id_cilindro`) REFERENCES `cilindro` (`id_cil`) ON DELETE NO ACTION ON UPDATE NO ACTION,
  3.   ADD CONSTRAINT `fk_movimiento_esfera1` FOREIGN KEY (`id_esfera`) REFERENCES `esfera` (`id_esf`) ON DELETE NO ACTION ON UPDATE NO ACTION,
  4.   ADD CONSTRAINT `fk_movimiento_lentes1` FOREIGN KEY (`id_lente`) REFERENCES `lentes` (`id_lente`) ON DELETE NO ACTION ON UPDATE NO ACTION;

¿Dónde la pusiste?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #17 (permalink)  
Antiguo 12/12/2014, 07:08
 
Fecha de Ingreso: noviembre-2014
Mensajes: 76
Antigüedad: 9 años, 5 meses
Puntos: 0
Respuesta: no se como restringir entrada de datos

ahhhhhhhhhhhhhhhhmigo


ahora si

muchisimas gracias
  #18 (permalink)  
Antiguo 12/12/2014, 07:17
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: no se como restringir entrada de datos



__________________
¿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: bases-de-datos-general, entrada, restringir, sql, 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 12:27.