Ayuda con MySQL

Iniciado por KeyPy HH, 26 Septiembre 2012, 08:05 AM

0 Miembros y 1 Visitante están viendo este tema.

KeyPy HH

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 (sql) [Seleccionar]
-- phpMyAdmin SQL Dump
-- version 2.10.3
-- http://www.phpmyadmin.net
--
-- Servidor: localhost
-- Tiempo de generación: 26-09-2012 a las 02:04:58
-- Versión del servidor: 5.0.51
-- Versión de PHP: 5.2.6

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";

--
-- Base de datos: `proveedores`
--

-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `inventario`
--

CREATE TABLE `inventario` (
  `codigoP` int(11) NOT NULL,
  `CodigoA` int(11) NOT NULL,
  `Precio` float NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

--
-- Volcar la base de datos para la tabla `inventario`
--

INSERT INTO `inventario` VALUES (1, 101, 70);
INSERT INTO `inventario` VALUES (2, 101, 80);
INSERT INTO `inventario` VALUES (3, 101, 75);
INSERT INTO `inventario` VALUES (2, 201, 50);
INSERT INTO `inventario` VALUES (1, 401, 450);
INSERT INTO `inventario` VALUES (1, 201, 13000);
INSERT INTO `inventario` VALUES (1, 101, 14000);

-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `productos`
--

CREATE TABLE `productos` (
  `codigoA` int(11) NOT NULL,
  `descripcion` text NOT NULL,
  `unidad` text NOT NULL,
  `cantidad` int(11) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

--
-- Volcar la base de datos para la tabla `productos`
--

INSERT INTO `productos` VALUES (101, 'CD-ROM', 'Unidad', 10);
INSERT INTO `productos` VALUES (101, 'Disco ATA', 'Unidad', 20);
INSERT INTO `productos` VALUES (201, 'Sonido de 16 bits', 'Unidad', 5);
INSERT INTO `productos` VALUES (401, 'Pentium II 800 Mhz', 'Unidad', 9);
INSERT INTO `productos` VALUES (102, 'Disco Flexible', 'Caja de 10', 20);
INSERT INTO `productos` VALUES (301, 'Papel Carta para Impresora Compaq PC All-In-One', 'Resma 100 Hojas', 25);
INSERT INTO `productos` VALUES (2, 'Motherboard Asus', 'unidades', 10);

-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `proveedor`
--

CREATE TABLE `proveedor` (
  `codigo` int(11) NOT NULL,
  `nombre` text NOT NULL,
  `telefono` text NOT NULL,
  `direccion` text NOT NULL,
  PRIMARY KEY  (`codigo`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

--
-- Volcar la base de datos para la tabla `proveedor`
--

INSERT INTO `proveedor` VALUES (1, 'Inca Tel', '4923-4803', 'Av. La Plata 365');
INSERT INTO `proveedor` VALUES (2, 'Infocad', '4633-2520', 'Doblas 1578');
INSERT INTO `proveedor` VALUES (3, 'Herrera Campusistem', '4232-7711', 'Av. rivadavia 3558');

HdM

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.

- Nice to see you again -