Consulta Dentista

SQL Server

25/05/2014

Olá a todos.
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

Guilherme

Curtidas 0

Respostas

Mariana Carvalho

Mariana Carvalho

25/05/2014

eu acho que entendi sim, nesse exemplo você deseja trabalhar com imagens no banco de dados, é isso?

ja tinha visto esse material?

[url]http://www.macoratti.net/vb5_isql.htm[/url]
GOSTEI 0
Marisiana Battistella

Marisiana Battistella

25/05/2014

Olá Guilherme!
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.


GOSTEI 0
Marisiana Battistella

Marisiana Battistella

25/05/2014

Com relação ao tipo de dados do atributo IMAGEM, ele deverá ser do tipo BLOB (binary large object) é um tipo de dados que pode pode armazenar dados binarios e são úteis para armazenar informação digital (por exemplo, imagens, áudio, vídeo).
Encontrei esse artigo que talvez te ajude a entender melhor: [url]http://www.macoratti.net/08/11/asp_blobs.htm[/url]
GOSTEI 0
Guilherme

Guilherme

25/05/2014

Muito obrigado.
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?
GOSTEI 0
Marisiana Battistella

Marisiana Battistella

25/05/2014

Não sei se isso que vou t dizer é a melhor solução, porque não conheço a análise do negócio.

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.
GOSTEI 0
Marisiana Battistella

Marisiana Battistella

25/05/2014

Outra questão que esqueci de comentar...
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?
GOSTEI 0
Guilherme

Guilherme

25/05/2014

Sim, pois assim seria possivel ver a evolução durante o tratamento.
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?
GOSTEI 0
Marisiana Battistella

Marisiana Battistella

25/05/2014

Isso! Pois cada imagem deverá estar vinculada a uma consulta.
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.
GOSTEI 0
Guilherme

Guilherme

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.


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.
GOSTEI 0
Marisiana Battistella

Marisiana Battistella

25/05/2014

Então, você vai ter que incluir uma FK na tabela de consultas com o IdImagem e deixá-lo como opcional e não precisa do IdConsulta na tabela imagem.
Assim, uma consulta poderá ser incluida sem que seja necessário vincular uma imagem a ela.
GOSTEI 0
Guilherme

Guilherme

25/05/2014

Estou baralhado.
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á.
GOSTEI 0
Marisiana Battistella

Marisiana Battistella

25/05/2014

Sim, te entendo!
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.
GOSTEI 0
Marisiana Battistella

Marisiana Battistella

25/05/2014

Isso que eu falo é de acordo com o entendimento que tive através das informações que você me falou...
Cabe a você verificar se atende as necessidades da realidade que vc está analisando.
GOSTEI 0
Guilherme

Guilherme

25/05/2014

Desde já agradeço a sua ajuda, mas não encontro material sobre relacionamentos 0:N, o mais parecido é 1:N.
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.
GOSTEI 0
Marisiana Battistella

Marisiana Battistella

25/05/2014

Por nada! Fico feliz em poder ajudar pelo menos um pouco!
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!

GOSTEI 0
Marisiana Battistella

Marisiana Battistella

25/05/2014

Mais algumas opções:
[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]
GOSTEI 0
Marisiana Battistella

Marisiana Battistella

25/05/2014

Se tiver dúvidas pode ir perguntando, responderei o que eu souber...
GOSTEI 0
Guilherme

Guilherme

25/05/2014

Muito muito obrigado. Tenho lido o material e é muito bom.
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?
GOSTEI 0
Marisiana Battistella

Marisiana Battistella

25/05/2014

Um questionamento necessário pra vc definir esse relacionamento é:
- 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?
GOSTEI 0
Guilherme

Guilherme

25/05/2014

Um Paciente só pode ter um Seguro de Saúde.
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
GOSTEI 0
Marisiana Battistella

Marisiana Battistella

25/05/2014

Então vc tem o relacionamento:
- 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?
GOSTEI 0
Guilherme

Guilherme

25/05/2014

Sim, correto.
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?
GOSTEI 0
Marisiana Battistella

Marisiana Battistella

25/05/2014

Você tem que deixar o atributo que contém a FK que referencia o Seguro de Saúde como opcional.
Assim, esse campo só receberá informação se o paciente tiver um seguro pra ser vinculado, caso contrário ele permancerá em branco.
GOSTEI 0
Marisiana Battistella

Marisiana Battistella

25/05/2014

Pelo menos foi assim que aprendi a implementar essa questão de opcionalidade e obrigatoriedade.
GOSTEI 0
Guilherme

Guilherme

25/05/2014

Quer dizer deixar a FK como NULL certo?
GOSTEI 0
Marisiana Battistella

Marisiana Battistella

25/05/2014

A FK você vai criar normalmente. O campo da tabela é que não poderá ser NOT NULL, para que você consiga inserir um paciente sem precisar informar um seguro de saúde.
GOSTEI 0
Guilherme

Guilherme

25/05/2014

Sim, entendi.
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]
GOSTEI 0
Marisiana Battistella

Marisiana Battistella

25/05/2014

Desculpa demora em responder...

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.
GOSTEI 0
Marisiana Battistella

Marisiana Battistella

25/05/2014

Depois desse tipo de compreensão é q você vai definir a cardinalidade dos relacionamentos, pra ver se são 1:1, 1:N, 0:N, assim por diante.
Somente, depois de tudo isso definido e aprovado é que vc vai se preocupar em interpretar o modelo para criar o banco de dados.
GOSTEI 0
Guilherme

Guilherme

25/05/2014

Essa tabela Imagens não é para a arcada, é para as fotos que podem ser tiradas ao longo das consultas, daí estarem relacionadas com a tabela Consulta.
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.
GOSTEI 0
Marisiana Battistella

Marisiana Battistella

25/05/2014

Quem bom que estou conseguindo te ajudar a pensar!
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.
GOSTEI 0
Guilherme

Guilherme

25/05/2014

Muito obrigado.
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?
GOSTEI 0
Marisiana Battistella

Marisiana Battistella

25/05/2014

Com relação a Arcada dentária, eu vejo duas alternativas...
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.
GOSTEI 0
Guilherme

Guilherme

25/05/2014

Vou implementar isso desse modo.

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?
GOSTEI 0
Marisiana Battistella

Marisiana Battistella

25/05/2014

Não cheguei a desenvolver em C# e também não utilizei o Visual Studio...

Antes de tudo define o Modelo Entidade Relacionamento, depois cria o banco de dados e prossiga...
GOSTEI 0
Guilherme

Guilherme

25/05/2014

Estou outra vez baralhado em relação à implementação da arcada.
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?
GOSTEI 0
Marisiana Battistella

Marisiana Battistella

25/05/2014

Humm... Como assim subimagens? Você quer dizer que haverá uma imagem única (original) para cada dente?
GOSTEI 0
Guilherme

Guilherme

25/05/2014

A Arcada é igual para cada Consulta.
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
GOSTEI 0
Marisiana Battistella

Marisiana Battistella

25/05/2014

Acho que entendi...
Mas aí seria só você criar um atributo para armazenar a imagem na arcada dentária...
GOSTEI 0
Guilherme

Guilherme

25/05/2014

Então
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?
GOSTEI 0
Marisiana Battistella

Marisiana Battistella

25/05/2014

Uma sugestão: Não vejo necessidade de vc criar essa tabela SUBIMAGEM, vc pode apenas criar um atributo na tabela ARCADA_DENTARIA. Assim, cada registro incluído nessa tabela terá uma imagem armazenada. Quando for salvar a consulta, a imagem deverá ser armazenada na tabela de IMAGENS.
GOSTEI 0
Guilherme

Guilherme

25/05/2014

Mas eu quero que uma Arcada contenha um conjunto de imagens, uma para cada dente.
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
GOSTEI 0
Marisiana Battistella

Marisiana Battistella

25/05/2014

Mas na tabela arcada você não vai criar um registro para cada dente com o número de ordem dele para depois poder ordenar as imagens e formar a arcada completa?
[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,...
GOSTEI 0
Marisiana Battistella

Marisiana Battistella

25/05/2014

Assim, vc teria a arcada dentária que conteria 32 registros, um para cada dente...
O atributos que vc teria na tabela arcada dentária seriam mais ou menos esses: ID_ARCADA, DESCRIÇÃO_DENTE, NUM_ORDEM, IMAGEM_DENTE
GOSTEI 0
Guilherme

Guilherme

25/05/2014

Sim é isso.
Confundi tudo outra vez.....
Sendo IMAGEM_DENTE a chave estrangeira para a tabela IMAGEM certo?
GOSTEI 0
Marisiana Battistella

Marisiana Battistella

25/05/2014

Poder ser um atributo também pode ser uma FK da tabela imagem...
Se for uma FK da tabela imagem, vc deverá garantir que a imagem não seja alterada...
GOSTEI 0
Guilherme

Guilherme

25/05/2014

Poder ser um atributo também pode ser uma FK da tabela imagem...
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?
GOSTEI 0
Guilherme

Guilherme

25/05/2014

Veja assim esta análise:
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.
GOSTEI 0
POSTAR