0
Given the following schema hypothetical:
create table cidade(
cidade_id integer primary key not null,
nome varchar(40)
);
create table envios(
id integer primary key not null,
cidade_origem_id integer,
cidade_destino_id integer
);
alter table envios add foreign key (cidade_origem_id) references cidade (cidade_id);
alter table envios add foreign key (cidade_destino_id) references cidade (cidade_id);
insert into cidade values (1, 'Barbacema');
insert into cidade values (2, 'Los Angeles');
insert into cidade values (3, 'São Paulo');
insert into cidade values (4, 'Porto Velho');
insert into envios values (1, 1,2);
insert into envios values (2, 2,3);
insert into envios values (3, 3,4);
create view cidade_origem as select * from cidade;
create view cidade_destino as select * from cidade;
To find shipments by origin and destination I have the following query:
select co.nome origem, cd.nome destino from envios e
inner join cidade co on co.cidade_id = e.cidade_origem_id
inner join cidade cd on cd.cidade_id = e.cidade_destino_id
What would weigh more? Leave the query as is or use two views (one for the city of origin and one for the city of destination), and joins with these views?
select co.nome origem, cd.nome destino from envios e
inner join cidade_origem co on co.cidade_id = e.cidade_origem_id
inner join cidade_destino cd on cd.cidade_id = e.cidade_destino_id