Ver Mensaje Individual
  #1 (permalink)  
Antiguo 14/09/2011, 15:54
Avatar de Chico3001
Chico3001
 
Fecha de Ingreso: septiembre-2011
Ubicación: Mexico, DF
Mensajes: 112
Antigüedad: 13 años, 2 meses
Puntos: 12
LLave primara compuesta con valores NULL

Hola, me di a la tarea de realizar una pagina web para aprender MYSQL y bases de datos, pero me acabo de topar con pared y por eso acudo a ustedes....

Resulta que tengo 3 tablas, una de personas, una de empresas y una de telefonos, y las estoy enlazando por medio de una 4a tabla con llaves primarias foraneas, necesito revisar que no existan duplicados, sin embargo algunas veces un telefono puede estar asignado a una persona, a una empresa o a ambos, por lo que 2 llaves tendrian que ser NULL, y segun tengo entendido esto no es posible

De que manera se podria diseñar la tabla para que se eviten valores duplicados permitiendo campos NULL en 1 de 2 columnas?

Les dejo la tabla que tengo hasta el momento

Código:
CREATE  TABLE IF NOT EXISTS `mundose1_nyx`.`empresas_personas` (
  `id` INT UNSIGNED NOT NULL AUTO_INCREMENT ,
  `id_grupo` INT UNSIGNED NOT NULL ,
  `id_empresa` INT UNSIGNED NULL ,
  `id_persona` INT UNSIGNED NULL ,
  `id_telefono` INT UNSIGNED NOT NULL ,
  `extension` CHAR(5) NULL ,
  `puesto` VARCHAR(20) NULL ,
  `departamento` VARCHAR(20) NULL ,
  PRIMARY KEY (`id`, `id_grupo`, `id_empresa`, `id_persona`, `id_telefono`) ,
  INDEX `fk_telefonos_empresas_nombres1` (`id_empresa` ASC) ,
  INDEX `fk_telefonos_personas_nombres1` (`id_persona` ASC) ,
  INDEX `fk_telefonos_config_grupos1` (`id_grupo` ASC) ,
  INDEX `fk_empresas_personas_telefonos1` (`id_telefono` ASC) ,
  CONSTRAINT `fk_telefonos_empresas_nombres1`
    FOREIGN KEY (`id_empresa` )
    REFERENCES `mundose1_nyx`.`empresas_nombres` (`id_empresa` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `fk_telefonos_personas_nombres1`
    FOREIGN KEY (`id_persona` )
    REFERENCES `mundose1_nyx`.`personas_nombres` (`id_persona` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `fk_telefonos_config_grupos1`
    FOREIGN KEY (`id_grupo` )
    REFERENCES `mundose1_nyx`.`config_grupos` (`id_grupo` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `fk_empresas_personas_telefonos1`
    FOREIGN KEY (`id_telefono` )
    REFERENCES `mundose1_nyx`.`telefonos` (`id_telefono` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;
***** UPDATE *****

Acabo de encontrar una posible solucion a mi problema, le añadi un indice unico con las columnas id_grupo, id_empresa, id_persona, e id_telefono, sin embargo la documentacion especifica ( y ya lo comprobe :D) que no se puede realizar la comprobacion con valores NULL...

Existira alguna manera de detectar un registro duplicado considerando valores NULL?

Gracias...

Última edición por Chico3001; 14/09/2011 a las 19:04