2014-12-10 23:45 GMT-02:00 Marcio A. Sepp <mar...@zyontecnologia.com.br>:

> Conforme sugerido num email anterior, estou abrindo este tópico para
> deixar a lista mais organizada.
> A pergunta eh simples: como vcs tratam tabelas de movimentação que contém
> muitos registros e que são referenciadas por outros objetos (fks)?
>

Primeiro, creio que você esteja falando de "particionamento de tabelas", e
não "replicação horizontal" (o último pode se confundir com outras
técnicas).

Quanto à sua dúvida. Uma prática comum é que a tabela pai fique *sempre*
vazia, e coloca-se uma trigger BEFORE INSERT nesta para redirecionar as
inserções da tabela pai para as tabelas filhas.

Agora, para garantir FK, costuma-se usar um tabela *shadow* (sombra). Nesta
tabela vai ter apenas uma cópia da chave primária da tabela sendo
particionada (geralmente uma chave artificial int/bigint
auto-incrementada), e esta também vai ser um chave primária dessa tabela,
assim sendo, sempre que precisar de uma chave estrangeira para a tabela
particionada, faz-se a chave para esta tabela *shadow*. Mesmo tendo muitos
registros, eles são compostos apenas de uma coluna com um índice, logo a
verificação costuma ser rápida o suficiente.

Claro, você deve usar funções de gatilho para manter essa tabela sempre
atualizada.

Veja, é um pouco trabalhoso, mas funciona.

Atenciosamente,
-- 
Matheus de Oliveira
Analista de Banco de Dados
Dextra Sistemas - MPS.Br nível F!
www.dextra.com.br/postgres
_______________________________________________
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a