Ver Mensaje Individual
  #9 (permalink)  
Antiguo 08/02/2015, 20:57
metalfox6383
 
Fecha de Ingreso: octubre-2006
Mensajes: 267
Antigüedad: 18 años, 1 mes
Puntos: 6
Pregunta Respuesta: Opción "Mandatory" en MySQL Workbench

Oh! Ok. Aquí va:

Código MySQL:
Ver original
  1. -- -----------------------------------------------------
  2. -- Table `bd_kachito`.`tiendas`
  3. -- -----------------------------------------------------
  4. CREATE TABLE IF NOT EXISTS `bd_kachito`.`tiendas` (
  5.   `Nombre` TEXT NULL DEFAULT NULL,
  6.   `Direccion` TEXT NULL DEFAULT NULL,
  7.   `NumeroPrefijo` INT(10) UNSIGNED NOT NULL COMMENT 'Número prefijo que se usará en las facturas.',
  8.   PRIMARY KEY (`id`))
  9. DEFAULT CHARACTER SET = latin1;
  10.  
  11. -- -----------------------------------------------------
  12. -- Table `bd_kachito`.`platos`
  13. -- -----------------------------------------------------
  14. CREATE TABLE IF NOT EXISTS `bd_kachito`.`platos` (
  15.   `Nombre` TEXT NULL DEFAULT NULL COMMENT 'Texto comercial que se utilizará al momento de la impresión o muestra de título en pantalla.',
  16.   `Descripcion` TEXT NULL DEFAULT NULL COMMENT 'Descripción del producto, sólo para mostrar en pantalla al mesero.',
  17.   `PrecioUnitario` DECIMAL(6,2) UNSIGNED NOT NULL,
  18.   `Categoria` TEXT NULL COMMENT 'Categoría al cuál pertenece el producto.',
  19.   `EnCirculacion` BIT NOT NULL COMMENT 'Booleano que indica si el producto se encuentra en circulación, es decir, si aún se vende.',
  20.   `idInsumos` INT UNSIGNED NOT NULL COMMENT 'ID de la relación entre Productos e Insumos.',
  21.   `idTienda` INT UNSIGNED NULL,
  22.   `idArea` INT UNSIGNED NOT NULL COMMENT 'Id del área encargada de elaborar el plato.',
  23.   PRIMARY KEY (`id`),
  24.   INDEX `fk_tiendas_idx` (`idTienda` ASC),
  25.   INDEX `fk_platos_areas1_idx` (`idArea` ASC),
  26.   CONSTRAINT `fk_tiendas_platos`
  27.     FOREIGN KEY (`idTienda`)
  28.     REFERENCES `bd_kachito`.`tiendas` (`id`)
  29.   CONSTRAINT `fk_platos_areas1`
  30.     FOREIGN KEY (`idArea`)
  31.     REFERENCES `bd_kachito`.`areas` (`id`)
  32. DEFAULT CHARACTER SET = latin1
  33. COMMENT = 'Almacena los platillos que en cada tienda se sirven.';

Es una tabla de platos y otra de tiendas. En mi lógica, cada tienda puede tener sus propios platos, por tal, un registro en la tabla "platos" hace referencia a la tienda al que pertenece. Pero quiero guardar platos generales (con idTienda=0) que serán jalados por todas las tiendas.
Sucede que el registro en la tabla "tiendas" con id=0 no existe, porque el id inicia con 1, es así que si quiero guardar un registro en la tabla "platos" con idTienda=0 no me lo permite.
Desactivando "Mandatory" en el diseño de mi diagrama, la restricción desaparece sin eliminar la llave foránea. Me interesa la eixstencia de la llave foránea, ya que así puedo eliminar un registro en la tabla "tiendas" y así eliminar también todos sus platos (por ejemplo).

Caí en esa lógica luego de haber desarrollado mi base de datos y haber experimentado con ella. Tal restricción estaba presente pero quería desactivarla sin tener que rehacer la base de datos completa.

Muchas gracias por la ayuda, amigo. Saludos.

Última edición por gnzsoloyo; 23/04/2015 a las 13:09