Recuperar os tipos por meio de uma relação Isa

votos
0

Meu banco de dados tem 7 mesas: um é o pai (alimentos) e os outros 3 são as crianças (feeds públicos, alimenta-privadas, gerado feeds) de uma relação ISA. Há uma mesa assinaturas com uma chave estrangeira na tabela de feeds. Cada usuário pode assinar um feed de qualquer tipo. O problema é que a vista para cada tipo de ração é diferente, o que significa que necessita para gerar ligações diferentes para cada tipo de ração subscrito. Sob o esquema atual Eu preciso executar 3 consultas para obter o tipo de alimentação do id feed. Existe uma melhor solução para este problema?

Publicado 19/05/2009 em 17:11
fonte usuário
Em outras línguas...                            


1 respostas

votos
0

Você pode usar uma vista de pré-se juntar as crianças para os pais, e para obter um resultado consistente, independentemente de qual tipo de criança. Por exemplo:

create view feed_links as
select f.feed_name
,      case f.feed_type
            when 'public' then pub.x + pub.y
            when 'private' then pri.z
            when 'generated' then gen.v + gen.w
            end as link
from   feeds f
left outer join public_feeds pub on pub.feed_id = f.feed_id
left outer join private_feeds pri on pri.feed_id = f.feed_id
left outer join generated_feeds gen on gen.feed_id = f.feed_id
where ...;

Ou se a sua mesa alimentos não tem uma coluna feed_type (ou equivalente):

create view feed_links as
select f.feed_name
,      case when pub.feed_id is not null then pub.x + pub.y
            when pri.feed_id is not null then pri.z
            when gen.feed_id is not null then gen.v + gen.w
            end as link
from   feeds f
left outer join public_feeds pub on pub.feed_id = f.feed_id
left outer join private_feeds pri on pri.feed_id = f.feed_id
left outer join generated_feeds gen on gen.feed_id = f.feed_id
where ...;
Respondeu 19/05/2009 em 17:59
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more