Modelagem x Performance Firebird
Trabalho com o FB 1.5, e modelo de uma forma que nao tenho certeza se é a mais correta.
Ilustrando minha duvida::
tabelas e respectivos campos da chave primaria com suas foreign keys::
tabela1
cdtabela1 primary key
tabela6
cdtabela6 primary key
cdtabela1 primary key (Foreign Key de tabela1)
tabela5
cdtabela5
tabela4
cdtabela7 primary key
cdtabela5 primary key (Foreign Key de tabela5)
tabela3
cdtabela6 primary key (Foreign Key de tabela6)
cdtabela1 primary key (Foreign Key de tabela6)
cdtabela5 primary key (Foreign Key de tabela4)
cdtabela7 primary key (Foreign Key de tabela4)
tabela2
cdtabela2 primary key
tabela8
cdtabela6 primary key (Foreign Key de tabela3)
cdtabela1 primary key (Foreign Key de tabela3)
cdtabela5 primary key (Foreign Key de tabela3)
cdtabela7 primary key (Foreign Key de tabela3)
cdtabela2 primary key (Foreign Key de tabela2)
Na tabela 8, a chave primária ficou com 5 campos, mas mesmo assim, tenho uma performance boa nos SQL´s. Acredito que isso se
deva ao fato de mesmo sendo uma chave primaria composta de tantos campos, o indice é quem manda no desempenho. O problema é
que meu comando SQL fica com um codigo enorme, pois tenho que fazer juncoes de todos. Pensei em trocar a chave primaria das
tabelas, ou seja, simplifica-las, ao inves de deixar todos os campos como chave primaria, criar um sequencial unico como PK,
e manter os demais campos apenas como FK, nao fazendo parte da chave, por exemplo:
tabela3
cdsequencial3 primary key (sequencial unico)
cdtabela6 (Foreign Key de tabela6)
cdtabela1 (Foreign Key de tabela6)
cdtabela5 (Foreign Key de tabela4)
cdtabela7 (Foreign Key de tabela4)
tabela8
cdsequencial3 primary key (Foreign Key de tabela3)
cdtabela2 primary key (Foreign Key de tabela2)
Vantagem: meus sql´s ficariam mais curtos e diretos
Melhor performance????
Desvantagem: se quiser filtrar a tabela8 por algum valor especifico do campo cdtabela7, nao teria a informação direta nesta,
ou seja, teria que relacionar a tabela4 para depois filtrar.
Gostaria da opiniao de alguem que ja tenha passado por essas situacoes na pratica, pois mesmo nao tendo problemas de
desempenho hoje, quero me prevenir de problemas futuros. Todas as sugestoes e observações serão válidas.
Grato.
Ilustrando minha duvida::
tabelas e respectivos campos da chave primaria com suas foreign keys::
tabela1
cdtabela1 primary key
tabela6
cdtabela6 primary key
cdtabela1 primary key (Foreign Key de tabela1)
tabela5
cdtabela5
tabela4
cdtabela7 primary key
cdtabela5 primary key (Foreign Key de tabela5)
tabela3
cdtabela6 primary key (Foreign Key de tabela6)
cdtabela1 primary key (Foreign Key de tabela6)
cdtabela5 primary key (Foreign Key de tabela4)
cdtabela7 primary key (Foreign Key de tabela4)
tabela2
cdtabela2 primary key
tabela8
cdtabela6 primary key (Foreign Key de tabela3)
cdtabela1 primary key (Foreign Key de tabela3)
cdtabela5 primary key (Foreign Key de tabela3)
cdtabela7 primary key (Foreign Key de tabela3)
cdtabela2 primary key (Foreign Key de tabela2)
Na tabela 8, a chave primária ficou com 5 campos, mas mesmo assim, tenho uma performance boa nos SQL´s. Acredito que isso se
deva ao fato de mesmo sendo uma chave primaria composta de tantos campos, o indice é quem manda no desempenho. O problema é
que meu comando SQL fica com um codigo enorme, pois tenho que fazer juncoes de todos. Pensei em trocar a chave primaria das
tabelas, ou seja, simplifica-las, ao inves de deixar todos os campos como chave primaria, criar um sequencial unico como PK,
e manter os demais campos apenas como FK, nao fazendo parte da chave, por exemplo:
tabela3
cdsequencial3 primary key (sequencial unico)
cdtabela6 (Foreign Key de tabela6)
cdtabela1 (Foreign Key de tabela6)
cdtabela5 (Foreign Key de tabela4)
cdtabela7 (Foreign Key de tabela4)
tabela8
cdsequencial3 primary key (Foreign Key de tabela3)
cdtabela2 primary key (Foreign Key de tabela2)
Vantagem: meus sql´s ficariam mais curtos e diretos
Melhor performance????
Desvantagem: se quiser filtrar a tabela8 por algum valor especifico do campo cdtabela7, nao teria a informação direta nesta,
ou seja, teria que relacionar a tabela4 para depois filtrar.
Gostaria da opiniao de alguem que ja tenha passado por essas situacoes na pratica, pois mesmo nao tendo problemas de
desempenho hoje, quero me prevenir de problemas futuros. Todas as sugestoes e observações serão válidas.
Grato.
Drf
Curtidas 0
Respostas
Drf
06/08/2008
Desculpem, mas mal postei lembrei de um detalhe. Mesmo simplificando a chave primaria, como trabalho com multi-empresa, teria no minimo dois campos na tabela, entao, seria valido esse ajuste no modelo? Qual a diferenca de performance em chave primaria com 1, 2, ou N campos?
Grato.
Grato.
GOSTEI 0