Consulta Dentista
Estou a desenvolver uma Base de Dados para Salvar as consultas de dentária.
Assim tenho a tabela CLIENTE, DENTISTA, CONSULTA.
Cliente e Dentista têm atributos semelhantes, como Nome, Endereço, Sexo, e cada um cod(PK).
A Tabela Consulta tem a a chave estrangeira associada a Cliente e outra associada a Dentista. Tem ainda a Data da Consulta.
Tenho agora uma dúvida.
Em cada consulta o dentista pode tirar fotos aos nossos dentes e arquiva-las. Devo inserir isto na tabela Consulta? Que tipo de atributo?
E ainda quero que, em cada consulta, o dentista tenha a seu dispor a foto de todos os dentes de uma boca, e que possa assinalar quais os dentes que tratou nessa mesma consulta. Por exemplo, o dentista deve ser capaz de sublinhar um dente qualquer e depois digitar um pequeno texto. Como armazeno isto na Base de Dados? Coloco também na tabela Consulta?
Talvez a minha explicação esteja um pouco confusa, mas espero ter passado a ideia.
Obrigado
É este género de imagem que quero que apareça sempre que alguém vá a uma consulta.
[img]http://arquivo.devmedia.com.br/forum/imagem/371781-20140525-064802.png[/img]
Guilherme
Respostas
Mariana Carvalho
25/05/2014
ja tinha visto esse material?
[url]http://www.macoratti.net/vb5_isql.htm[/url]
Marisiana Battistella
25/05/2014
Você pode criar uma tabela IMAGEM para a armazenar todas as imagens por consulta, por cliente e por dentista.
Esta tabela vai possui os atributos: ID_IMAGEM (PK), ID_CLIENTE (FK), ID_DENTISTA (FK), IMAGEM e se quiser pode até colocar um campo pra armazenar observações referentes a imagem. Outro atributo que possa ser útil é a DATA de alteração ou inserção da imagem, pois pode ser que você precise saber quais são as imagens mais recentes ou as imagens mais antigas.
Marisiana Battistella
25/05/2014
Encontrei esse artigo que talvez te ajude a entender melhor: [url]http://www.macoratti.net/08/11/asp_blobs.htm[/url]
Guilherme
25/05/2014
Vou implementar já.
E em relação à imagem que quero que apareça sempre que houver uma consulta médica?
Crio alguma tabela com essa imagem como atributo?
Marisiana Battistella
25/05/2014
Pelo que entendi, essa imagem principal é composta pelo conjunto de imagens de todos os dentes do cliente, já que o dentista pode marcar quais dentes ele tratou em cada consulta.
Então, você poderia criar uma tabela ARCADA_DENTARIA ( COD_ARCADA (PK), DESCRICAO, ORDEM ) que armazenará um registro dos nomes e a ordem dos dentes. Esse atributo ORDEM você poderá utilizar pra ordenar as imagens formando a arcada dentária do cliente.
Na tabela IMAGEM, você deverá ter uma FK para identificar à qual dente da arcada dentária a imagem pertence.
Com relação as observações que ele faz, você tem que ver se é uma informação por imagem (dente) ou se são informações da consulta. Se for da consulta, armazena em um campo na tabela CONSULTA, senão armazena por imagem na tabela IMAGEM.
Agora, cabe a você analisar, se isso que falei pode ser aplicado.
Marisiana Battistella
25/05/2014
Deverá ser armazenado um histórico das alterações nas imagens a fim de se obter a evolução do que foi realizado em cada dente?
Guilherme
25/05/2014
Na Tabela Imagem devo também incluir o IdConsulta certo? Para associar as imagens/docs adicionados em cada consulta.
Entre Consulta e Imagens temos um relacionamento 1:N, pois em cada consulta pode ser adicionadas várias imagens.
Mas e se não for necessario adicionar nenhum Doc/Imagem? Este relacionamento permite isso?
Marisiana Battistella
25/05/2014
Nesse caso, se podem haver consultas que não tenham nenhuma imagem você deverá utilizar 0:N.
Se você utilizar 1:N todas as consultas deverá ter no mínimo uma imagem.
Guilherme
25/05/2014
Se você utilizar 1:N todas as consultas deverá ter no mínimo uma imagem.
Concordo, mas como crio esse tipo de relacionamento no SQL Management Studio?
Penso que N poderá ser 0, 1, 2, .., ou seja, cada consulta pode ter associado 0, 1, 2, ou mais Imagens.
Criei a tabela Imagem com IdImagem, IdConsulta, Descricao, Imagem. Não coloquei data pois, através do IDConsulta acesso à tabela Consulta e esta já tem a data.
Marisiana Battistella
25/05/2014
Assim, uma consulta poderá ser incluida sem que seja necessário vincular uma imagem a ela.
Guilherme
25/05/2014
Tentando ir devagar. Tenho as seguintes tabelas e relacionamentos.
[img]http://arquivo.devmedia.com.br/forum/imagem/371781-20140528-135322.png[/img]
A Tabela ANEXOS armazena fotos que podem ser tiradas numa consulta, pode ser 0, 1,....
Depois a tabela IMAGEM vai guardar cada um dos dentes que quero que apareça sempre que uma nova CONSULTA é criada.
Por fim, na tabela ARCADA_DENTARIA é onde, a cada imagem de IMAGEM digo qual o seu lugar para depois apresentar na tela.
A minha dúvida é então a parte do relacionamento 0:N, não consegui entender como fazer.
Desculpe a falta de entendimento, mas se puder explicar melhor.
Obrigado desde já.
Marisiana Battistella
25/05/2014
Quando você cria um relacionamento 0:N significa que pode ter nenhum ou muitos registros.
No teu caso, uma consulta poderá ter nenhuma imagem ou ela poderá ter uma ou mais imagens. Por isso, o atributo que você armazenará o código da imagem na tabela consulta não poderá ser NOT NULL, mas isso você vai tratar no momento da criação da estrutura do banco de dados.
No caso de você vir a manter um histórico das imagens alteradas, cada vez que uma imagem for alterada deverá ser inserido um novo registro na tabela imagem. Então você deverá ter um relacionamento 1:1, que significa que uma imagem deverá estar associada a uma única uma consulta.
Na minha opinião, você deve relacionar a tabela IMAGEM à tabela CONSULTA e a tabela ARCADA_DENTÁRIA deverá estar relacionada apenas a tabela IMAGEM.
Marisiana Battistella
25/05/2014
Cabe a você verificar se atende as necessidades da realidade que vc está analisando.
Guilherme
25/05/2014
Aprecio muito a sua ajuda a tentar entender melhor o problema pois sou bastante iniciante nesta matéria de Base de Dados.
Tenho aprendido bastante e gosto sempre alguém mais sabio que eu me ajude.
Marisiana Battistella
25/05/2014
Está certo em ir com calma, porque é importante entender como é essa parte de modelagem, é um conhecimento que vai ser fundamental em tudo...
Encontrei esse site Metrópole Digital que possui um conteúdo interessante, é um curso e os conteúdos estão separados em aulas . Vale a pena conferir!
Marisiana Battistella
25/05/2014
[url:descricao=Tecnologias de Banco de Dados e Modelagem de Dados Parte 2 Leia mais em: Tecnologias de Banco de Dados e Modelagem de Dados Parte 2 https://www.devmedia.com.br/tecnologias-de-banco-de-dados-e-modelagem-de-dados-parte-2/1871#ixzz337mQPYBU]https://www.devmedia.com.br/tecnologias-de-banco-de-dados-e-modelagem-de-dados-parte-2/1871[/url]
Cardinalidade
[url:descricao=Cardinalidade (modelagem de dados)]http://pt.wikipedia.org/wiki/Cardinalidade_(modelagem_de_dados)[/url]
[url:descricao=Modelagem de Dados 2 – Os Relacionamentos]http://imasters.com.br/artigo/4799/banco-de-dados/modelagem-de-dados-2-os-relacionamentos/[/url]
Marisiana Battistella
25/05/2014
Guilherme
25/05/2014
Uma outra relação que me está a dar a volta à cabeça é a relação entre Paciente e Seguro de Saúde.
Um Paciente tem duas opções: Tem Seguro ou Não Tem Seguro.
Um Seguro com determinadas condições pode ser prestado a mais do que um Paciente.
Deste modo, devo criar o relacionamento Paciente - Seguro, que será 0:N
E o relacionamento inverso, Seguro - Paciente, que será 1:N.
Isto será possível de implementar?
Marisiana Battistella
25/05/2014
- Um paciente pode ter mais de um Seguro Saúde?
- Um seguro saúde, pode pertencer a quantos pacientes? Ele pode existir sem que tenha pacientes vinculados a ele?
Guilherme
25/05/2014
Um Seguro pode ter Zero ou mais Pacientes. Pode ter sido criado e ainda ninguem se ter vinculado a ele, e pode ter várias pessoas a si associado
Marisiana Battistella
25/05/2014
- Um Paciente só pode ter um Seguro de Saúde = 0:1 ( o paciente só pode ter um ou nenhum seguro de saúde )
- Um Seguro pode ter Zero ou mais Pacientes = 0:N ( o seguro pode ter nenhum ou muitos pacientes vinculados a ele)
Correto?
Guilherme
25/05/2014
O problema é criar esses relacionamentos, pois quando crio tabelas o que faço é apenas ligar a chave strangeira de uma tabela a uma chave primaria de outra tabela.
Acabam por ser apenas relacionamentos 1:N(chave primaria:chave estrangeira)
Como posso condicionar para serem relacionamentos como os especificados no seu post anterior?
Marisiana Battistella
25/05/2014
Assim, esse campo só receberá informação se o paciente tiver um seguro pra ser vinculado, caso contrário ele permancerá em branco.
Marisiana Battistella
25/05/2014
Guilherme
25/05/2014
Marisiana Battistella
25/05/2014
Guilherme
25/05/2014
Eu tenho posto sempre a chave estrangeira nas tabelas que tomam o valor de 'N' num relacionamento.
Talvez esteja pensando muito muito mal assim....
Por exemplo, a relação MEDICO:CONSULTA é uma relação 1:N e por isso a tabela CONSULTA tem o IdMedico(PK na tabela MEDICO).
No caso da relação CONSULTA:IMAGENS quem tem N no relacionamento(IMAGENS) não é quem fica com a chave estrangeira, mas sim a tabela CONSULTA.
Eu vi que em MySql tem como criar relacionamentos e especificar se pode ou não ter valor opcional, 0.
Mas em Sql Server não sei.
[img]http://arquivo.devmedia.com.br/forum/imagem/371781-20140603-174222.png[/img]
Marisiana Battistella
25/05/2014
Não é correto pensar assim, pois se vc tivesse um relacionamento 1:1 e 1:1 o que vc faria?
Quando vc está modelando, vc não deve se preocupar tanto em como vai ser a estrutura no banco de dados, pois é a aplicação que deverá se adaptar ao modelo de dados e não o contrário.
No exemplo que vc aprensentou, vc deve entender que as consultas são realizadas por um médico e por isso toda consulta deverá ter um médico associado.
As consultas serão realizadas para um paciente, então esse paciente também deverá estar vinculado a ela.
Todo paciente terá um histórico com imagens dos dentes que foram trabalhados e cada imagem representará um dente. Então as imagens estarão vinculadas ao paciente e ao dente que ela representa na arcada dentária.
Marisiana Battistella
25/05/2014
Somente, depois de tudo isso definido e aprovado é que vc vai se preocupar em interpretar o modelo para criar o banco de dados.
Guilherme
25/05/2014
Porque acha que Imagens deve estar relacionado com Paciente?
Eu achei melhor associar a Consulta para que na proxima Consulta possa ver a evolução.
Em relação à Arcada pensei também relacionar a Consulta, pois vai ser possivel tomar anotações nela em cada Consulta.
O meu problema é estar a pensar no problema e estar a criar as tabelas no SGBD ao mesmo tempo, mas vc tem me ajudado bastante a melhorar o meu pensamento.
Marisiana Battistella
25/05/2014
Tentei descrever um exemplo de como meu professor de Análise me ensinou a pensar pra entender a modelagem e saber o que precisa ser projetado para melhor atender a necessidade do negócio.
Então, conforme o que vc falou está correto associar as imagens a consulta.
Guilherme
25/05/2014
Depois de implementar todas as tabelas e relacionamentos no SQL Server devo fazer algumas stored procedures e views, para me ajudarem a realizar a interface gráfica certo?
Vi uns sites sobre modelação em C# para criar a interface com o utilizador em Visual Studio.
Acha uma boa linguagem para isto?
O que me aconselha?
Marisiana Battistella
25/05/2014
1) Você pode associar à consulta, sendo que, em uma consulta pode ser tratado mais de um dente e um dente (nome do dente) pode ser vinculado a consultas diferentes. Então, entende-se que você tem um relacionamento N para N, onde:
CONSULTA (0,N) ---------------------------- (1,N) ARCADADENTARIA [ /code]
Nesse tipo de relacionamento faz-se necessário criar a tabela CONSULTA_ARCADADENTARIA para armazenar as associações.
2) Você pode associar a arcada dentaria as imagens, considerando que uma imagem deverá pertencer a um único dente, e um dente pode ter nenhuma ou muitas imagens associadas.
[code] IMAGEM (0,N) ------------------------------- (1,1) ARCADADENTARIA Olhando assim, eu acho que a primeira alternativa é mais viável.
Guilherme
25/05/2014
Depois de criadas todas as tabelas e relacionamentos crio então as views e procedures.
Vou fazer a interface em C#, usando Visual Studio.
Já trabalhou com isso? Acha a melhor maneira?
Marisiana Battistella
25/05/2014
Antes de tudo define o Modelo Entidade Relacionamento, depois cria o banco de dados e prossiga...
Guilherme
25/05/2014
Eu quero que a Arcada apareça em todas as Consultas, apenas uma vez, ou seja, uma Arcada por cada Consulta.
A Arcada é um conjunto de SubImagens, para não confundir com Imagens onde guardo o upload das imagens tiradas na consulta.
Assim,
Consulta (1, 1) ------------------------ (1, N) Arcada.
Acha bem até aqui?
Marisiana Battistella
25/05/2014
Guilherme
25/05/2014
A Arcada é um conjunto de imagens, uma imagem para cada dente. Daí ter chamado subimagens.
Os dentes que formam a Arcada, as imagens deles, são sempre as mesmas.
O que quero dizer é que a Arcada é sempre a mesma, aquela que postei no primeiro post
Marisiana Battistella
25/05/2014
Mas aí seria só você criar um atributo para armazenar a imagem na arcada dentária...
Guilherme
25/05/2014
Consulta (1, 1) ---------- (1, N) Arcada (1, N) ---------- (1, N) SubImagem
Tendo Consulta uma FK para relacionar com Arcada.
Tendo Arcada uma FK para relacionar com SubImagem.
Atributos de Arcada:
IdArcada PK
IdSubImagem FK
Ordem (ordem onde a SubImagem vai se posicionar)
Atributos de SubImagem:
IdSubImagem PK
Desc
Uma dúvida: se em cada Arcada tenho sempre as mesmas SubImagens pela mesma ordem e se para Consulta a Arcada é sempre a mesma, isso não tem de ser processado de forma diferente dos normais relacionamentos?
Marisiana Battistella
25/05/2014
Guilherme
25/05/2014
Se for apenas um atributo terei de criar tantas Arcadas quantos os 32 dentes existentes na boca.
Eu não quero associar a imagem de cada dente á tabela Imagens.
Essa tabela é só para armazenar as imagens que o médico vai tirando nas várias consultas
Marisiana Battistella
25/05/2014
[img:descricao=Arcada_dentaria]http://arquivo.devmedia.com.br/forum/imagem/262490-20140611-112812.jpg[/img]
Eu tava pensando nesse sentido....
Vc vai ter um registro para o Incisivo Central Superior, outro para o Primeiro Molar Superior,...
Marisiana Battistella
25/05/2014
O atributos que vc teria na tabela arcada dentária seriam mais ou menos esses: ID_ARCADA, DESCRIÇÃO_DENTE, NUM_ORDEM, IMAGEM_DENTE
Guilherme
25/05/2014
Confundi tudo outra vez.....
Sendo IMAGEM_DENTE a chave estrangeira para a tabela IMAGEM certo?
Marisiana Battistella
25/05/2014
Se for uma FK da tabela imagem, vc deverá garantir que a imagem não seja alterada...
Guilherme
25/05/2014
Se for uma FK da tabela imagem, vc deverá garantir que a imagem não seja alterada...
Mas pode ser apenas atributo? Não sendo FK?
Se sim como faço a relação com a tabela Imagem que guarda cada um dos dentes?
Guilherme
25/05/2014
Se colocar os atributos em Arcada: Cod_Arcada, ordem, descricao, imagem_dente.
Tenho a seguinte relação:
CONSULTA (0, N) ---------- (1, N) ARCADA
Por ser uma relação N:N crio nova entidade: CONSULTA_ARCADA apenas com Cod_Consulta e Cod_Arcada que serão PK e FK.
Já na tabela Consulta não há nenhuma chave estrangeira para relacionar com CONSULTA_ARCADA, pois essa ligação é criada a
partir da FK Cod_Consulta que é atributo na tabela CONSULTA_ARCADA.
Esta modelagem já atende aos requisitos:
Arcada é o conjunto de todos os 32 dentes.
Em cada Consulta podem ser tratados um ou mais dentes.
Um determinado dente pode ser tratado em mais do que uma Consulta
Acho que não me escapa nada.