Me ajudem nessa modelagem

20/08/2012

0

Bom dia!!!

É a primeira vez que estou postando um tópico solicitando ajuda! Estou estudando modelagem de banco de dados e me deparei com o seguinte problema de banco de dados:

Tenho um sistema que gerencia o controle de correspondências de uma organização. Temos as seguintes tabelas (tem mais, mas as tabelas que me deram dúvidas foram somente as três seguintes):

CREATE TABLE entidades (
id_entidade INT AUTO_INCREMENT,
nome VARCHAR(100) NOT NULL,
id_tipo_entidade INT NOT NULL,
id_situacao INT NOT NULL,
PRIMARY KEY (id_entidade),
FOREIGN KEY (id_tipo_entidade) REFERENCES entidades_tipos (id_tipo_entidade),
FOREIGN KEY (id_situacao) REFERENCES entidades_situacoes (id_situacao)
);

CREATE TABLE enderecos (
id_endereco INT AUTO_INCREMENT,
id_entidade INT NOT NULL,
logradouro VARCHAR(100) NOT NULL,
bairro VARCHAR(50),
cep VARCHAR(10),
id_tipo_endereco INT NOT NULL,
id_municipio INT NOT NULL,
ativo boolean DEFAULT true,
PRIMARY KEY (id_endereco),
FOREIGN KEY (id_entidade) REFERENCES entidades (id_entidade),
FOREIGN KEY (id_tipo_endereco) REFERENCES enderecos_tipos (id_tipo_endereco),
FOREIGN KEY (id_municipio) REFERENCES municipios (id_municipio)
);

CREATE TABLE correspondencias (
id_correspondencia INT AUTO_INCREMENT,
id_endereco_remetente INT NOT NULL,
id_endereco_destinatario INT NOT NULL,
PRIMARY KEY (id_correspondencia),
FOREIGN KEY (id_endereco_remetente) REFERENCES enderecos (id_endereco),
FOREIGN KEY (id_endereco_destinatario) REFERENCES enderecos (id_endereco)
);

Bem, acho que não fui tão mal assim nos relacionamentos! :D

O meu problema é que eu quero fazer a seguinte consulta me SQL:
Quero visualizar todas as correspondências que eu enviei como uma tabela de dois campos (DE e PARA).

Observa-se que cada correspondência tem o identificador do endereço do remetente e do endereço do destinatário. Na tabela "enderecos" é que temos o identificador da entidade. O nome da entidade é que me interessa para visualizar.

Alguém pode me ajudar?
Lucivaldo Branco

Lucivaldo Branco

Responder

Posts

21/08/2012

Eduardo Gonçalves



O meu problema é que eu quero fazer a seguinte consulta me SQL:
Quero visualizar todas as correspondências que eu enviei como uma tabela de dois campos (DE e PARA).

Observa-se que cada correspondência tem o identificador do endereço do remetente e do endereço do destinatário. Na tabela "enderecos" é que temos o identificador da entidade. O nome da entidade é que me interessa para visualizar.


Sua modelagem parece correta sim! Para fazer o SQL, você vai ter que instanciar as tabelas de enderecos e entidades duas vezes em seu SQL (uma para tratar do remetente e outra para o destinatário). Um exemplo de consulta seria:

SELECT c.id_correspondencia, c.id_endereco_remetente, c.id_endereco_destinatario, endr.nome nome_remetente, endd.nome nome_destinatario
FROM correspondencias c, enderecos endr, enderecos endd, entidades entr, entidades entd 
WHERE
c.id_endereco_remetente = endr.id_endereco AND
c.id_endereco_destinatario = endd_id_endereco AND
endr.id_entidade = entr.id_entidade AND
endd.id_entidade = entd.id_entidade


Dá para fazer a consulta com INNER JOIN também.
Responder

21/08/2012

Eduardo Gonçalves

Ops, retificando, a query é:


SELECT c.id_correspondencia, c.id_endereco_remetente, c.id_endereco_destinatario, entr.nome nome_remetente, entd.nome nome_destinatario
FROM correspondencias c, enderecos endr, enderecos endd, entidades entr, entidades entd
WHERE
c.id_endereco_remetente = endr.id_endereco AND
c.id_endereco_destinatario = endd_id_endereco AND
endr.id_entidade = entr.id_entidade AND
endd.id_entidade = entd.id_entidade
Responder

22/08/2012

Lucivaldo Branco

Meu caro, muito obrigado pela sua ajuda!!!! Valeu mesmo!!! Estou iniciando em Java, tenho muitas dúvidas! Muito obrigado mesmo!

Ops, retificando, a query é:


SELECT c.id_correspondencia, c.id_endereco_remetente, c.id_endereco_destinatario, entr.nome nome_remetente, entd.nome nome_destinatario
FROM correspondencias c, enderecos endr, enderecos endd, entidades entr, entidades entd
WHERE
c.id_endereco_remetente = endr.id_endereco AND
c.id_endereco_destinatario = endd_id_endereco AND
endr.id_entidade = entr.id_entidade AND
endd.id_entidade = entd.id_entidade
Responder

23/08/2012

Eduardo Gonçalves

Sua modelagem está muito boa, a linguagem SQL é que é complicada mesmo, as vezes é bem difícil montar a consulta SQL que a gente deseja.
Responder

23/08/2012

Lucivaldo Branco

Valeu!!! Muito obrigado!!! Quero me aprofundar mais em arquitetura de banco de dados. Quer ler um livro sobre o assunto. Você sabe de algum livro muito bom? Não importa o número de páginas, abaixo de 1.500 eu topo!!! rsrsrsrsr

Sua modelagem está muito boa, a linguagem SQL é que é complicada mesmo, as vezes é bem difícil montar a consulta SQL que a gente deseja.
Responder

24/08/2012

Eduardo Gonçalves

Bem, um livro que fala (quase) tudo sobre banco de dados é o dos autores Elmasri e Navathe - "Fundamentos de Bancos de Dados". Mas é um livro bem denso, que é adotado em muitas universidades. Eu gosto mais da versão em Inglês do que da tradução em português.

Como alternativa, você pode começar de uma forma mais leve, por exemplo, estudando a arquitetura do SGBD que você está trabalhando, para conhecê-lo, depois compará-lo com os outros SGBD's e associar as funcionalidades desse SGBD com os conceitos teróricos sobre banco de dados.
Responder

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar