Me ajudem nessa modelagem
20/08/2012
0
É 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
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.
21/08/2012
Eduardo Gonçalves
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
22/08/2012
Lucivaldo Branco
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
23/08/2012
Eduardo Gonçalves
23/08/2012
Lucivaldo Branco
24/08/2012
Eduardo Gonçalves
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.
Clique aqui para fazer login e interagir na Comunidade :)