Eu quero que quando eu for cadastrar uma modificacao e selecionar o gerente, já trazer os dados referentes ao usuario (gerente, team e nivel).
Estou tentando aqui com chave estrangeira, mas nao ta indo…to anos sem programar…to sem a logica do negocio kkkk
Alguem poderia ajudar? vlw
Tabela usuario
CREATE TABLE `usuario` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`authority` varchar(20) NOT NULL,
`name` varchar(70) NOT NULL,
`password` varchar(100) NOT NULL,
`username` varchar(40) NOT NULL,
`gerente` varchar(50) NOT NULL,
`team` varchar(10) NOT NULL,
`nivel` varchar(10) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=latin1
Tabela modificacoes
CREATE TABLE `modificacoes` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`business_impact` text NOT NULL,
`short_description` text NOT NULL,
`system` varchar(10) NOT NULL,
`mod_number` varchar(30) NOT NULL,
`customer` varchar(50) NOT NULL,
`end_date` datetime NOT NULL,
`start_date` datetime NOT NULL,
`status` varchar(30) DEFAULT NULL,
`user_create` varchar(40) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=latin1
CREATE TABLE `usuario` (
`idUser` int(11) NOT NULL AUTO_INCREMENT,
`authority` varchar(20) NOT NULL,
`name` varchar(70) NOT NULL,
`password` varchar(100) NOT NULL,
`username` varchar(40) NOT NULL,
`gerente` varchar(50) NOT NULL,
`team` varchar(10) NOT NULL,
`nivel` varchar(10) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=latin1
Na tabela modificações você precisa por o ID do usuário que modificou alguma coisa:
CREATE TABLE `modificacoes` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`idUser` Int NOT NULL,
`business_impact` text NOT NULL,
`short_description` text NOT NULL,
`system` varchar(10) NOT NULL,
`mod_number` varchar(30) NOT NULL,
`customer` varchar(50) NOT NULL,
`end_date` datetime NOT NULL,
`start_date` datetime NOT NULL,
`status` varchar(30) DEFAULT NULL,
`user_create` varchar(40) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=latin1
Depois criar a relação entre as tabelas com o FK criado:
Alter table modificacoes add Foreign Key (idUser ) references usuario (idUser) on delete cascade on update cascade;
Você pode remover o trecho on delete cascade on update cascade se achar necessário, ali estamos dizendo que quando um usuário for removido, as modificações que estão gravadas na tabela filho ‘modificacoes’, também serão removidas.
Pensando aqui se é isso mesmo… para cada gerente, são vários funcionários e times diferentes. No formulario de modificacoes, se eu selecionar o gerente, ele vai trazer os usuarios e teams?
Entendi… mas tem alguma ideia que eu ainda nao estou conseguindo formar… que é na hora de cadastrar uma modificação.
Nao fica estranho na hora que for fazer o insert das modificacoes e ter que colocar o idUser? Como vou selecionar uma ID sendo que nao vou saber a quem se refere aquela ID…porque vai ter mtos…
Talvez se escrever o username seria mais pratico…sera q nao? mas ai teria q mudar a chave primaria da tabela usuario para o username neh?
Imagine que você grave a modificação para o usuário ‘João’ qu tme o id ‘5’, na tabela modificacoesvocê guarda o 5. Toda vez que você alterar um dado do usuário 5, não vai mudar nada na tabela modificacoes, porque está atrelado ao id.
Se você guardar o nome como chave, pode acontecer de existir 2 João, e o banco disparar um Exception dizendo que a chave foi violada.
Sobre como saber o id do usuário, aí eu não sei como está funcionando a estrutura da sua aplicação. Esse usuário seria alguém logado?
a tabela modificacoes é referente a atualizacoes em servidores que sao feitas (entao fica tudo registrado que no servidor X foram feitas tais atualizacoes)
Mas entao como eu faco de uma maneira mais intuitiva para add essa id sem ser ter que colocar o numero dela?
Se a sua preocupação é mostrar o nome do usuário que fez a alteração, isso não é problema, basta aplicar a seleção que lhe mostrei acima, você filtra o nome do usuário através da id dele.
Na questao de mostrar, seria só quando for mostrar os dados na tabela e no relatorio mesmo.
Pra mim o importante é na hora que for cadastrar uma modificacao… porque vou ter que adicionar o idUser e nao fica muito intuitivo ter que add o numero da ID do usuario .
Pensando aqui… se eu conseguir colocar o id do usuario logado já no campo, ótimo…resolve o problema, mas posso tambem fazer um select e mostrar o ID do usuario e ele só digita no campo o user dele, né?
Dessa forma você cria vulnerabilidade no sistema.
O usuário 3 pode apagar uma lista de clientes e colocar o código do usuário 5.
Não há motivos para que o usuário forneça esse tipo de informação, uma vez que tem o idUser do usuário ativo logado, todas as modificações feitas por ele, serão registradas.
a dica que dou tbm na hora da criação de tabelas é que previamente vc faça uma modelagem de dados assim evitando um monte de transtornos, veja:
CREATE TABLE `modificacoes` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`idUser` Int NOT NULL,
`business_impact` text NOT NULL,
`short_description` text NOT NULL,
`system` varchar(10) NOT NULL,
`mod_number` varchar(30) NOT NULL,
`customer` varchar(50) NOT NULL,
`end_date` datetime NOT NULL,
`start_date` datetime NOT NULL,
`status` varchar(30) DEFAULT NULL,
`user_create` varchar(40) NOT NULL,
PRIMARY KEY (`id`),
CONSTRAINT `ID_USER` FOREIGN KEY (`idUser`) REFERENCES `usuario` (`idUser`)
ON DELETE CASCADE
ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=latin1
assim vc já mata o ALTER TABLE, deixando ele apenas para alguma coisa bastante necessária, outra dica é, nomeie suas chaves com nomes diferentes assim se vc precisar criar alguma Trigger ou procedure ou até mesmo o algum sql vc ñ se perca.