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...