Ajuda para adequar o MER a modelagem do meu sistema

SQL Server

C#

30/01/2018

Olá alguém pode me ajudar, Não Estou Conseguindo relacionar a tabela dos exames tipo exame de sangue, urina, hemograma…!
Segue imagem Abaixo:
https://goo.gl/KWf2o3
Marcos

Marcos

Curtidas 0

Respostas

Luiz Santos

Luiz Santos

30/01/2018

Boa tarde Marcos.

Cara, adorei o "IdFezes"...rs

Bom, falando sério.
Esse seu sistema é algo sério ou um estudo?
Se for sério, existe um código padrão para exames, definido pela ANS que serve para controlar esse tipo de coisa.
Mais informações no link http://www.ans.gov.br/images/stories/Legislacao/in/anexo_in44_dides.pdf.

Caso seja só um estudo, me baseando pelo seu modelo de dados:
- Você tem a tabela exame que teria o id da solicitação.
- Dentro de Tipo, seria o seu agrupamento.
- Quando você fala em fezes, urina, sangue, estamos falando em grupos de exame. Ou seja, fezes, sangue e urina são dados, não entidades separadas.

Consegui ser claro?

Grande abraço
GOSTEI 0
Marcos

Marcos

30/01/2018

Olá, Luiz Fernando
eu fiz a pergunta errada,
então é um sistema interno, pois o mesmo gera laudos de exames, mais esta sendo feito no word
ai eu queria desenvolver mais estou apanhando na relação das tabelas de exames.

Exemplo:
Tipo cadastrei paciente joão
- joão quer fazer exame de urina e hemograma
- vou colocar o resultado dos dois exame que joão solicitou que é urina e hemograma,
depois quero ver este dois resultado de exame armazenados no banco, e no cadastro do joão.
Mais até o momento amigo parece que consegui sanar meu problema.
Veja agora o diagrama do Banco de dados
https://goo.gl/qwWK2e

Não sei se compreendeu?
GOSTEI 0
Luiz Santos

Luiz Santos

30/01/2018

Oi Marcos.
Entendi o que você quer fazer.
E realmente é complicado.
Em uma base relacional você vai ter que fazer exatamente isso.
Uma tabela para cada exame.
Pq cada exame vai ter um tipo de resultado diferente.
O máimo que vc vai poder fazer é agrupar exames que tenham características em comum.
Por exemplo, foi pedido apenas um exame de colesterol.
Como tem colesterol no hemograma, você gravaria ele na tabela do hemograma, e assim com os exames.

Correto?
GOSTEI 0
Marcos

Marcos

30/01/2018

Opa Luiz Fernando, então no momento estou com dois tipo de exame
tipo titulo dos exames como se fosse uma ficha mais com resultado dos exames
estou com dois Titulo Exame hemograma e Urina
que nem esta na image abaixo o que contem na tabela hemograma e tudo que vai armazenar resultado deste hemograma e assim também na tabela urina tudo que tem na mesma é para armazenar resultado de urina já esta pronta creio eu

tipo o Rapaz que faz os exames armazena os valores do resultado em arquivo word
ai estou a desenvolver para agilizar
tipo estão trabalhando da forma antiga
sou Iniciante em programação.
mais já fiz os sistema e já está cadastrando e puxando os dados correto.


GOSTEI 0
Jerson Boer

Jerson Boer

30/01/2018

Olá Marcos,

Você não pode ter 1 tabela só com esses exames, relacionando com chaves e identificações, ao invés de ter 1 tabela pra cada tipo?

Pelo que entendi é 1 exame x N análises (sangue, urina, etc) x 1 resultado, certo?

Exemplo:

Exame
> ExameID
> LaboratorioID
> MedicoID
> PacienteID
> DataExame

TipoExame (Essa tabela só relaciona análise com exame)
> TipoExameID
> ExameID
> AnaliseID
> Resultado

Analise (Essa seria o seu banco de dados de análises possíveis)
> AnaliseID
> Analise
> Limites

Aí na análise você vai ter:

1 | Hemograma | a até b
2 | Urina | menor que x
3 | Sangue | vermelho
GOSTEI 0
Marcos

Marcos

30/01/2018

ola Jerson Boer, a Tabela de Hemograma é um Exame
a Tabela de Urina é outro exame entendeu?
Tipo amigo você pede para fazer um exame de urina
-ai coleta o material depois vai fazer analise
esta parte não entra no sistema da analise,
oque entra é somente o resultado do analise, tipo isso é somente a ficha de resultado.
GOSTEI 0
Jerson Boer

Jerson Boer

30/01/2018

Vamos lá, só pra entender a estrutura, a tabela EXAME é aberta toda a vez que o paciente vai ao "Médico", nesta visita pode ser solicitado em um mesmo EXAME várias coisas, tipo, hemograma, urina e sangue, 3 coisas em 1 mesmo exame, cada uma com seu resultado, certo?
GOSTEI 0
Marcos

Marcos

30/01/2018

Sim Isso mesmo
Ai como fiz a procedure
https://goo.gl/5pfJng
não sei se vai ocorrer tudo certo mais parece que está
GOSTEI 0
Jerson Boer

Jerson Boer

30/01/2018

Nesse exemplo de resultado que mandou, está buscando pelas 3 tabelas (Hemograma, Urina, Sangue) ? E se amanhã você começar a fazer outro tipo de exame, vai ter que criar 1 nova tabela, mudar novamente sua query, pra considerar esse novo exame?
GOSTEI 0
Jerson Boer

Jerson Boer

30/01/2018

Mostre novamente uma imagem com o relacionamento que ficou e a estrutura de suas tabelas.
GOSTEI 0
Marcos

Marcos

30/01/2018

Ai amigo como estas
select a.NumFicha,a.NomePac,a.DataNasc,a.EmailPac,b.DataExame,c.NomeExame,l.NomeLab,m.NomeMed from paciente a
inner join exame b on a.PacienteID = b.PacienteID
inner join tipoexame c on b.TipoExameID = c.TipoExameID
inner join laboratorio l on b.LaboratorioID = l.LaboratorioID
inner join medico m on b.MedicoID = m.MedicoID;
GOSTEI 0
Jerson Boer

Jerson Boer

30/01/2018

Aí sim, pelo que entendi da estrutura você desconsiderou a ideia de ter 1 tabela pra cada exame, finaliza na tabela TipoExame que trás todos, aí está correto.
GOSTEI 0
Marcos

Marcos

30/01/2018

Ai meu Script amigo do Banco De Dados Sql
https://goo.gl/CyibfG
GOSTEI 0
Jerson Boer

Jerson Boer

30/01/2018

Criei a base com a sua estrutura e adicionei informações de exemplo, agora vejo que está correta, ou ainda tem alguma dúvida? O resultado vai colocar em qual tabela?
GOSTEI 0
Marcos

Marcos

30/01/2018

Jerson Boer
na Verdade o que vai valer é eu imprimir o resultado do exame com informações
Nome do Paciente, data da coleta,nome medico,idade,numero da ficha e observações
Este ai exemplo que eu estava fazendo:
https://goo.gl/tZDUph
GOSTEI 0
Marcos

Marcos

30/01/2018

Não sendo menos importante as outras relações mais oque o paciente quer é o resultado do exame, e o Bioquímico quer os exames armazenados ele também queria se daria para colocar resultado de exames anteriores se um paciente tiver exames anteriores para comparar.
GOSTEI 0
Jerson Boer

Jerson Boer

30/01/2018

Vou tentar montar um exemplo de como eu faria a estrutura para esse sistema e envio a você assim que finalizar.
GOSTEI 0
Marcos

Marcos

30/01/2018

Jerson Eder Boer
- beleza amigo obrigado.
GOSTEI 0
Jerson Boer

Jerson Boer

30/01/2018

Realizei a configuração que encaminho abaixo os links:

Imagem com o diagrama de relacionamentos da base
https://drive.google.com/file/d/1rfb5PRAHn74zxk7R__c0963_qMRS6QYe/view?usp=sharing

Script para criação do banco de dados, com informações preenchidas para visualização da estrutura
https://drive.google.com/file/d/14S6Pi1ZL6TF1qCc3OLNNOSfjTRRzaQXz/view?usp=sharing

Qual a ideia dessa estrutura, note que as informações que estavam como campos na tabela Hemograma ou Urina, eu joguei para serem valores na tabela ExameParametros.

Quais os benefícios que imagino nessa estrutura:

1) Dinâmica na manutenção de parâmetros, você não tem limite de parâmetros a adicionar em um exame e não precisa sempre criar novos campos e novas tabelas

2) A criação de uma tabela de parâmetros, além da dinâmica, possibilita também que você adicione os valores de referência que devem ser seguidos para cada um deles.

3) O relacionamento das tabelas FichaExame, Exame e ExameParametros através da tabela FichaExameParametros te dá toda a informação e estrutura que precisa para não ter a necessidade de novas tabelas.

4) Você pode criar uma única tela para input de resultado que seja na forma de grid, não sendo necessário ter 1 tela para cada configuração de exame/parâmetro. Uma mesma tela, terá os parâmetros solicitados de acordo com o exame existente na ficha.

5) Outras informações como Cor, Sexo, Estado Civil, Cidade e Estado, que irão se repetir muito em todos os cadastros, também coloquei na forma de tabela, isso garante a padronização da informação, uma vez que o usuário irá buscar de uma lista e não ficar criando novos a cada novo paciente, criando muitas vezes "Casado, Cazado, Caasado", que futuramente não te possibilita busca de informações com base em determinado parâmetro.

6) Você pode ter nesta estrutura TODOS os exames que já foram realizados para este paciente, juntamente com todos os parâmetros que foram examinados e com seus respectivos resultados.

Bom, é isso, espero que isso ajude, avalie as informações e qualquer coisa retorna o post.
GOSTEI 0
Marcos

Marcos

30/01/2018

ola Jerson Eder Boer, obrigado amigo mais eu não sei mesmo como fazer isso
4) Você pode criar uma única tela para input de resultado que seja na forma de grid, não sendo necessário ter 1 tela para cada configuração de exame/parâmetro. Uma mesma tela, terá os parâmetros solicitados de acordo com o exame existente na ficha.

Criar uma tela de entrada de resultado na forma de grid eu sei
só não sei solicitar estes parâmetros para obter o exame de acordo com a ficha.
GOSTEI 0
Marcos

Marcos

30/01/2018

Seria mais ou menos assim uma consulta de quantos exames um paciente tem?
select a.IDPaciente,a.NomePaciente,a.DataNascimento,a.Email,e.Exame,b.DataExame,l.Laboratorio,m.Medico from paciente a
inner join FichaExame b on a.IDPaciente = b.IDPaciente
inner join FichaExameParametros c on b.IDFichaExame = c.IDFichaExame
inner join laboratorio l on b.IDLaboratorio = l.IDLaboratorio
inner join medico m on b.IDMedico = m.IDMedico
inner join exame e on b.IDFichaExame = c.IDFichaExame;

GOSTEI 0
Luiz Santos

Luiz Santos

30/01/2018

Marcos, boa tarde.

Não se preocupe.
Vc está indo bem.
Como vc mesmo disse, está começando e se virando como pode.

O que o Jerson comentou é verdade.
Se amanhã você começar a fazer outro tipo de exame, vai ter que incluir mais uma tabela no seu modelo, e incluir ela no seu relatório.

Mas acredito que vc tenha a intenção de melhorar seu sistema assim que concluir ele.

Acredite, tudo isso vai contribuir para o seu aprendizado.

Grande abraço
GOSTEI 0
Jerson Boer

Jerson Boer

30/01/2018

Marcos,

Pra você obter os parâmetros a serem adicionados ao cadastro da ficha sempre que você abrir um novo exame, você pode usar uma função tipo essa:

INSERT INTO FichaExameParametros
	(IDFichaExame, IDExame, IDParametro)
SELECT FichaExame.IDFichaExame, FichaExame.IDExame, ExameParametros.IDParametro
	FROM FichaExame INNER JOIN
		ExameParametros ON FichaExame.IDExame = ExameParametros.IDExame
	WHERE (FichaExame.IDFichaExame = 2)


Você vai executar essa função após criar um novo cadastro da ficha, ela vai pegar o IDFichaExame, com isso, vai buscar na tabela de parâmetros do exame quais devem ser avaliados e vai incluir automaticamente todos na tabela FichaExameParametros, aí você mostra essa informação no seu cadastro da ficha de exame, na grid que comentei, usando uma função mais ou menos assim:

SELECT FichaExameParametros.IDParametro, ExameParametros.Parametro, FichaExameParametros.Resultado, ExameParametros.ValorReferencia
FROM FichaExameParametros INNER JOIN
	ExameParametros ON FichaExameParametros.IDParametro = ExameParametros.IDParametro
WHERE (FichaExameParametros.IDFichaExame = 2)


Se você quiser buscar todos os exames que determinado paciente fez, você poderia usar essa query:

SELECT FichaExame.IDFichaExame, FichaExame.NumeroFicha, FichaExame.DataAbertura, 
	FichaExame.DataExame, Paciente.NomePaciente, Medico.Medico, Laboratorio.Laboratorio, Exame.Exame
FROM FichaExame INNER JOIN
	Paciente ON FichaExame.IDPaciente = Paciente.IDPaciente INNER JOIN
    Medico ON FichaExame.IDMedico = Medico.IDMedico INNER JOIN
    Laboratorio ON FichaExame.IDLaboratorio = Laboratorio.IDLaboratorio INNER JOIN
    Exame ON FichaExame.IDExame = Exame.IDExame


Aí quando o médico escolhesse uma das fichas pra verificar o que foi avaliado no exame, ele traria uma tela usando aquela mesma query citada acima (a segunda).
GOSTEI 0
Marcos

Marcos

30/01/2018

Ola Jerson Boer e luiz fernando agradeço mesmo o tempo que tiraram para responder minha pergunta
muito obrigado mesmo.
GOSTEI 0
Jerson Boer

Jerson Boer

30/01/2018

Beleza Marcos, precisando, retorne o post... Sucesso..
GOSTEI 0
POSTAR