elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.


 


Tema destacado: Como proteger una cartera - billetera de Bitcoin


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  Bases de Datos (Moderador: Carloswaldo)
| | | |-+  Ayuda con MySQL
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Ayuda con MySQL  (Leído 1,557 veces)
KeyPy HH

Desconectado Desconectado

Mensajes: 26


Ver Perfil
Ayuda con MySQL
« en: 26 Septiembre 2012, 08:05 »

Hola.

Paso por acá porque se que hay gente que maneja muy bien comandos SQL y necesito una ayuda: Yo tengo tres tablas en una base de datos llamada "proveedores", Una tabla tiene una columna con codigos de productos(Tabla "productos"), otra tabla tiene una columna con codigos de proveedores(tabla "proveedor"), y la tercera tabla tiene los codigos de ambos, pero ademas de eso registra el precio del producto de un determinado proveedor(tabla "inventario"), lo cual indica, que se puede repetir el mismo producto de diferentes proveedores, y el mismo proveedor provee varios productos. Lo que quiero evitar es que se registre mas de un mismo producto por proveedor. Osea, que un proveedor solo suministre un solo producto del mismo tipo. Creo que me hice entender, no? Aqui Anexo el codigo .sql

Muchas gracias de antemano por la ayuda

Código
  1. -- phpMyAdmin SQL Dump
  2. -- version 2.10.3
  3. -- http://www.phpmyadmin.net
  4. --
  5. -- Servidor: localhost
  6. -- Tiempo de generación: 26-09-2012 a las 02:04:58
  7. -- Versión del servidor: 5.0.51
  8. -- Versión de PHP: 5.2.6
  9.  
  10. SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
  11.  
  12. --
  13. -- Base de datos: `proveedores`
  14. --
  15.  
  16. -- --------------------------------------------------------
  17.  
  18. --
  19. -- Estructura de tabla para la tabla `inventario`
  20. --
  21.  
  22. CREATE TABLE `inventario` (
  23.  `codigoP` INT(11) NOT NULL,
  24.  `CodigoA` INT(11) NOT NULL,
  25.  `Precio` FLOAT NOT NULL
  26. ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
  27.  
  28. --
  29. -- Volcar la base de datos para la tabla `inventario`
  30. --
  31.  
  32. INSERT INTO `inventario` VALUES (1, 101, 70);
  33. INSERT INTO `inventario` VALUES (2, 101, 80);
  34. INSERT INTO `inventario` VALUES (3, 101, 75);
  35. INSERT INTO `inventario` VALUES (2, 201, 50);
  36. INSERT INTO `inventario` VALUES (1, 401, 450);
  37. INSERT INTO `inventario` VALUES (1, 201, 13000);
  38. INSERT INTO `inventario` VALUES (1, 101, 14000);
  39.  
  40. -- --------------------------------------------------------
  41.  
  42. --
  43. -- Estructura de tabla para la tabla `productos`
  44. --
  45.  
  46. CREATE TABLE `productos` (
  47.  `codigoA` INT(11) NOT NULL,
  48.  `descripcion` text NOT NULL,
  49.  `unidad` text NOT NULL,
  50.  `cantidad` INT(11) NOT NULL
  51. ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
  52.  
  53. --
  54. -- Volcar la base de datos para la tabla `productos`
  55. --
  56.  
  57. INSERT INTO `productos` VALUES (101, 'CD-ROM', 'Unidad', 10);
  58. INSERT INTO `productos` VALUES (101, 'Disco ATA', 'Unidad', 20);
  59. INSERT INTO `productos` VALUES (201, 'Sonido de 16 bits', 'Unidad', 5);
  60. INSERT INTO `productos` VALUES (401, 'Pentium II 800 Mhz', 'Unidad', 9);
  61. INSERT INTO `productos` VALUES (102, 'Disco Flexible', 'Caja de 10', 20);
  62. INSERT INTO `productos` VALUES (301, 'Papel Carta para Impresora Compaq PC All-In-One', 'Resma 100 Hojas', 25);
  63. INSERT INTO `productos` VALUES (2, 'Motherboard Asus', 'unidades', 10);
  64.  
  65. -- --------------------------------------------------------
  66.  
  67. --
  68. -- Estructura de tabla para la tabla `proveedor`
  69. --
  70.  
  71. CREATE TABLE `proveedor` (
  72.  `codigo` INT(11) NOT NULL,
  73.  `nombre` text NOT NULL,
  74.  `telefono` text NOT NULL,
  75.  `direccion` text NOT NULL,
  76.  PRIMARY KEY  (`codigo`)
  77. ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
  78.  
  79. --
  80. -- Volcar la base de datos para la tabla `proveedor`
  81. --
  82.  
  83. INSERT INTO `proveedor` VALUES (1, 'Inca Tel', '4923-4803', 'Av. La Plata 365');
  84. INSERT INTO `proveedor` VALUES (2, 'Infocad', '4633-2520', 'Doblas 1578');
  85. INSERT INTO `proveedor` VALUES (3, 'Herrera Campusistem', '4232-7711', 'Av. rivadavia 3558');
  86.  


En línea

HdM


Desconectado Desconectado

Mensajes: 1.674



Ver Perfil
Re: Ayuda con MySQL
« Respuesta #1 en: 26 Septiembre 2012, 09:25 »

Hola.

Arreglarías el problema haciendo que la clave principal de la tabla "inventario" fuese la dupla codigoP-codigoA. También podrías controlar por código, que antes de hacer la inserción compruebe si existe o no esa dupla de valores en la tabla.

De todos modos, viendo el diseño de la tabla "productos", realmente el campo codigoA, no es clave (además que no está definida como tal), ya que hay distintos artículos con mismo código. ¿Esto debe ser así? Te lo digo ya que más bien parece que codigoA hace referencia a una "categoría" de artículos y no a un artículo en concreto.

Saludos.


En línea

- Nice to see you again -
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  
Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines