Verificar se existe algo em comum entre duas Strings ou no Banco de dados

Olá, bom dia.

tem os seguintes exemplos:

String alergia: “selênio, picada de mosquito, plutônio, remédios a base de cobre e mercúrio, não pode pegar sol”;

String remédio 1: “este remédio contem: selênio, acido e fosforo”
Strinh remédio 2: “este remédio contem: sal, ferro e mercúrio”

No geral, eu queria saber se, existe alguma forma de eu pegar essa String toda de ALERGIA, e fazer um tipo de select ou mesmo um código java, e comparar em todo banco de dados de produtos, e pudesse mostrar quais produtos seriam compatíveis com a String alergia, igual no exemplo acima, onde tanto remédio 1 quanto o 2, não poderiam ser usado pelo paciente, pois o mesmo, contem alergia dos dois.

Quais dados vc tem exatamente? De onde vem essas strings?

Se vc tem esses textos exatamente assim, desta forma, é complicado. Vc teria que quebrar as strings em palavras (pesquise por “java string split”), descartar as que não interessam (por exemplo, “este” não seria levado em conta na análise), e aí para cada palavra, ver se ela está na lista de ingredientes de cada remédio.

Se estiver no banco de dados, então vc teria que voltar para a prancheta e estruturar melhor isso. Por exemplo, ter uma tabela de alergênicos (aí teria um registro para cada: selênio, picada de mosquito, etc), uma de pessoas (pacientes?) e outra tabela de remédios. E uma tabela MxN que associe os remédios aos alergênicos, e outra que associe as pessoas às coisas que ela tem alergia. Aí fica bem mais fácil montar uma consulta SQL para saber o que cada uma pode tomar.

ok, vamos do inicio…

Eu tenho a tabela de pacientes, todos cos seus dados e tudo mais, porem, nessa mesma tabela, existe a coluna de alergias, onde cada paciente pode ter a mesma ou sua clave especifica de alergias.

Depois disso, existe uma tabela dos remédios, onde também possui seus atributos e tudo mais, e claro, existe uma coluna chamada de detalhes, onde será inserida, toda a composição do remédio, no caso, componentes que o remédio possui.

quando o paciente for selecionado pelo sistema, todas as informações deles serão carregadas no sistema, até ai tudo bem.

Toda as informações de alergias do paciente, ficarão em uma String, que, na ideia, iria ser usada para comparar no banco de dados dos remédios (mais exatamente na coluna detalhes), todos em que o paciente viesse a ter alergia, no caso, os componentes da medicação.

Tipo assim…dada a String de alergias do paciente “selênio, picada de mosquito, luminosidade, mofo, acaro”, se o sistema encontrasse algo dentre os remédios cadastrados, que tivessem esses componentes, o sistema avisaria. Até o momento, estou vendo uma forma de contornar isso, mas até o momento, não encontrei nada.

Ex prático:

paciente selecionado:
Ronaldo, 32 anos, solteiro, 1.80m, alergias: plutônio, remédios a base de cobalto e selênio, morfina e mofo.

remédio cadastrado:
xilocaína, fabricado em 2020, 6 comprimidos, 60g, cor verde, componentes: cobre, volfarina, selênio, cobalto e hidrogênio.

como no exemplo acima, o sistema iria fazer uma varredura no estoque e iria identificar que existe um remédio em que o paciente iria ter alergia.

é isso.

Eu sugiro rever esta estrutura. Deixar uma única string com toda a descrição é péssimo, por vários motivos (um vc já percebeu, dificulta demais a busca).

Uma ideia é ter uma tabela de alergênicos (“coisas” que causam alergia, não sei se tem nome melhor):

id nome
1 morfina
2 selênio
3 cobre

E uma tabela de usuários:

id nome
11 Ronaldo

(daí teria outras colunas para idade, altura, etc)

Uma tabela de remédios:

id nome
21 xilocaína

(e colunas pro ano de fabricação, cor, etc)

Daí, uma tabela que associa usuários e suas alergias:

id_usuario id_alergenico
11 1
11 2

(Ronaldo tem alergia a morfina e selênio)

E outra tabela que associa remédios e seus ingredientes:

id_remedio id_alergenico
21 2
21 3

(xilocaína tem selênio e cobre)

Pronto, agora uma query com alguns joins pode verificar se o remédio tem algum ingrediente que causa alergia em determinado usuário.

Bem melhor que ficar tentando manipular strings.

Você pode usar o operador LIKE da linguagem sql para procurar palavras dentro do campo com a descrição do remédio no banco de dados. Ex: WHERE detalhes LIKE ‘%mandioca%’.

Mas como já foi dito, vai ter que separar as palavras da descrição da alergia e descartar as palavras sem relevância.

Só pra exemplificar, veja como ficaria: SQL Fiddle

Claro, isso é só uma ideia inicial, sem saber dos requisitos. Mas é pra mostrar como fica mais flexível do que permitir texto livre.

Se fosse seguir sua ideia, teria que quebrar o texto em palavras, verificar quais dessas palavras estão no outro texto, etc, enfim, uma complicação desnecessária.

Acho que o PO faltou nas aulas de normalização ;D

Brincadeiras à parte, faça como o Hugo sugeriu, reestruture esse banco para tornar suas consultas exequíveis, ou então você vai ter que extrair informação de dados não estruturados, texto no caso, e isso não é tão trivial, vc vai começar a colocar o pé em data mining e text mining e, sinceramente, vc não precisa se aventurar nessas coisa se normalizar seu banco.

1 curtida