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:
***** UPDATE *****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;
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...