gpt4 book ai didi

mysql - 我可以通过MySQL控制外键值吗?

转载 作者:行者123 更新时间:2023-11-29 20:40:48 25 4
gpt4 key购买 nike

正如我在标题中所写的,我对 MySQL 上的外键有疑问。重点是我有一个关于 Doctrine 的类 Persona 和另一个名为 Incidencia 的类。

    class Persona implements UserInterface, \Serializable
{
private $dni;
private $nombre;
private $apellidos;
private $telefono;
private $direccion;
private $correo;
private $codigoPostal;
private $idPuesto;
private $idGrupo;
private $username;
private $password;

/**
* @var boolean
*
* @ORM\Column(name="es_tecnico", type="boolean", nullable=false)
*/
private $esTecnico;
...
}

Class Incidencia {
private $id;
private $idTecnico;
private $idGrupo;
...
}

DROP TABLE IF EXISTS `incidencia`;
CREATE TABLE IF NOT EXISTS `incidencia` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`id_persona_tecnico` int(11) DEFAULT NULL,
`id_prioridad` int(11) NOT NULL,
`id_tipo_incidencia` int(11) NOT NULL,
`id_persona_peticionaria` int(11) NOT NULL,
`id_persona_afectada` int(11) NOT NULL,
`id_estado_incidencia` int(11) NOT NULL,
`id_grupo` int(11) DEFAULT NULL,
`id_ambito_afeccion` int(11) NOT NULL,
`asunto` varchar(128) COLLATE utf8_unicode_ci NOT NULL,
`descripcion` text COLLATE utf8_unicode_ci NOT NULL,
`fecha_apertura` datetime NOT NULL,
`fecha_cierre` datetime DEFAULT NULL,
`tramitandose` tinyint(1) NOT NULL,
PRIMARY KEY (`id`),
KEY `id_persona_peticionaria` (`id_persona_peticionaria`),
KEY `id_persona_afectada` (`id_persona_afectada`),
KEY `id_prioridad` (`id_prioridad`),
KEY `id_estado_incidencia` (`id_estado_incidencia`),
KEY `id_tipo_incidencia` (`id_tipo_incidencia`),
KEY `id_ambito_afeccion` (`id_ambito_afeccion`),
KEY `id_grupo` (`id_grupo`),
KEY `id_persona_tecnico` (`id_persona_tecnico`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
ALTER TABLE `incidencia`
ADD CONSTRAINT `FK_C7C6728C23BDDE75` FOREIGN KEY (`id_prioridad`) REFERENCES `prioridad` (`id`),
ADD CONSTRAINT `FK_C7C6728C628BDAE3` FOREIGN KEY (`id_grupo`) REFERENCES `grupo` (`id`),
ADD CONSTRAINT `FK_C7C6728C829BBDC6` FOREIGN KEY (`id_persona_afectada`) REFERENCES `persona` (`id`),
ADD CONSTRAINT `FK_C7C6728C8A99A9BD` FOREIGN KEY (`id_persona_peticionaria`) REFERENCES `persona` (`id`),
ADD CONSTRAINT `FK_C7C6728C8F4984FA` FOREIGN KEY (`id_estado_incidencia`) REFERENCES `estado_incidencia` (`id`),
ADD CONSTRAINT `FK_C7C6728CB2B1B14A` FOREIGN KEY (`id_ambito_afeccion`) REFERENCES `ambito_afeccion` (`id`),
ADD CONSTRAINT `FK_C7C6728CBF1EB32C` FOREIGN KEY (`id_tipo_incidencia`) REFERENCES `tipo_incidencia` (`id`),
ADD CONSTRAINT `FK_C7C6728CE3611082` FOREIGN KEY (`id_persona_tecnico`) REFERENCES `persona` (`id`);


DROP TABLE IF EXISTS `persona`;
CREATE TABLE IF NOT EXISTS `persona` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`id_puesto` int(11) DEFAULT NULL,
`id_grupo` int(11) DEFAULT NULL,
`id_lugar_trabajo` int(11) NOT NULL,
`id_localidad` int(11) NOT NULL,
`id_prioridad` int(11) NOT NULL,
`dni` varchar(10) COLLATE utf8_unicode_ci NOT NULL,
`nombre` varchar(256) COLLATE utf8_unicode_ci NOT NULL,
`apellidos` varchar(256) COLLATE utf8_unicode_ci NOT NULL,
`telefono` varchar(256) COLLATE utf8_unicode_ci NOT NULL,
`direccion` varchar(256) COLLATE utf8_unicode_ci NOT NULL,
`correo` varchar(256) COLLATE utf8_unicode_ci NOT NULL,
`codigo_postal` int(11) NOT NULL,
`es_tecnico` tinyint(1) NOT NULL,
`username` varchar(25) COLLATE utf8_unicode_ci DEFAULT NULL,
`password` varchar(64) COLLATE utf8_unicode_ci DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `dni` (`dni`),
UNIQUE KEY `UNIQ_51E5B69BF85E0677` (`username`),
KEY `id_localidad` (`id_localidad`),
KEY `id_lugar_trabajo` (`id_lugar_trabajo`),
KEY `id_puesto` (`id_puesto`),
KEY `id_grupo` (`id_grupo`),
KEY `nombre` (`nombre`),
KEY `prioridad` (`id_prioridad`),
KEY `apellidos` (`apellidos`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
ALTER TABLE `incidencia`
ADD CONSTRAINT `FK_C7C6728C23BDDE75` FOREIGN KEY (`id_prioridad`) REFERENCES `prioridad` (`id`),
ADD CONSTRAINT `FK_C7C6728C628BDAE3` FOREIGN KEY (`id_grupo`) REFERENCES `grupo` (`id`),
ADD CONSTRAINT `FK_C7C6728C829BBDC6` FOREIGN KEY (`id_persona_afectada`) REFERENCES `persona` (`id`),
ADD CONSTRAINT `FK_C7C6728C8A99A9BD` FOREIGN KEY (`id_persona_peticionaria`) REFERENCES `persona` (`id`),
ADD CONSTRAINT `FK_C7C6728C8F4984FA` FOREIGN KEY (`id_estado_incidencia`) REFERENCES `estado_incidencia` (`id`),
ADD CONSTRAINT `FK_C7C6728CB2B1B14A` FOREIGN KEY (`id_ambito_afeccion`) REFERENCES `ambito_afeccion` (`id`),
ADD CONSTRAINT `FK_C7C6728CBF1EB32C` FOREIGN KEY (`id_tipo_incidencia`) REFERENCES `tipo_incidencia` (`id`),
ADD CONSTRAINT `FK_C7C6728CE3611082` FOREIGN KEY (`id_persona_tecnico`) REFERENCES `persona` (`id`);

嗯,最重要的是Persona.$esTecnico。如果为 false,则 $username$password$idPuesto$idGrupo 必须为 NULL 。关键是我在 Incidencia 类中有一个外键属性 Incidencia.$idTecnicoPersona,并且在我的应用程序中,它们只能如果属性 Persona.$esTecnico 为 true,则连接,所以我需要控制它。我的疑问是我是否可以直接在 MySQL 中控制该行为(使用 phpmyadmin),或者我需要使用应用程序中的一些代码来控制它。

谢谢!!

最佳答案

尝试检查提供的查询:

select
person.id_persona_tecnico,
case when person.es_tecnico = 0 then NULL else person.id_puesto end as id_puesto,
case when person.es_tecnico = 0 then NULL else person.id_grupo end as id_grupo,
person.id_lugar_trabajo,
person.id_localidad,
person.id_prioridad,
person.dni,
person.nombre,
person.apellidos,
person.telefono,
person.direccion,
person.correo,
person.codigo_postal,
person.es_tecnico,
case when person.es_tecnico = 0 then NULL else person.username end as username,
case when person.es_tecnico = 0 then NULL else person.password end as password
from


(select
id_persona_tecnico,
id_puesto,
id_grupo,
id_lugar_trabajo,
id_localidad,
id_prioridad,
dni,
nombre,
apellidos,
telefono,
direccion,
correo,
codigo_postal,
es_tecnico,
username,
password
from persona)as person



left join



(select
id_persona_tecnico,
id_prioridad,
id_tipo_incidencia,
id_persona_peticionaria,
id_persona_afectada,
id_estado_incidencia,
id_grupo,
id_ambito_afeccion,
asunto,
descripcion,
fecha_apertura,
fecha_cierre,
tramitandose
from incidencia) as inci

on person.id_persona_tecnico = inci.id_persona_tecnico

关于mysql - 我可以通过MySQL控制外键值吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38648839/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com