Seguem as respostas :

'
1. PK composta de CNPJ + Fabrica + Local entrega + Doca + Tipo programa"
Ok, é isso.

 
"2. PK composta por CNPJ + sequencial , combinada com UK composta por Fabrica + 
Local entrega + Doca + Tipo programa"
Essa UK seria composta de CNPJ + Fabrica + Local entrega + Doca + Tipo programa.
'

=> olhando o texto acima, vc afirma que na verdade ia criar a UK tal como a 
primeira opção de PK : se o desejado é garantir unicidade para a combinação 
CNPJ + Fabrica + Local entrega + Doca + Tipo programa , a partir do momento que 
vc criou uma PK ** ou ** uma UK com essa combinação de campos, vc garantiu essa 
unicidade, não faz sentido então vc querer ter um PK com CNPJ + sequencial 
JUNTO com a UK com os outros campos todos...
 Acho que a sua dúvida então é quais diferenças vc ia ter se criasse a 
constraint necessária como PK versus se criar como UK, mas sempre com todos os 
campos  ?? Se for isso, a resposta é simples : basicamente NENHUMA diferença... 
E entenda que tanto a PK composta quanto a UK composta teriam um único índice 
composto, ok ?? 

'
Lembrando, que esse assunto todo, foi pq jã vi em muitos lugares o pessoal 
desaconselhando usar PK's muito longas, compostas de muitos campos (essas 
sugestões não necessariamente se referiam ao Oracle, ok?), aconselhando 
transformar esses campos em um sequence. Por isso vim aqui perguntar, onde só 
tem especialista em Oracle, se o mesmo se aplicava a ele.
'

OK : sim, falando em termos de performance qquer que seja o SGBD quanto mais 
colunas houver na chave de um índice, mais esforço vai ser necessário para 
Ordenar esse índice, para manter as suas entradas, sim, sim.... É ** incerto ** 
pra nós, porém, aqui de fora, sem conhecer NADA do seu ambiente, sabermos se 
esse Overhead a mais decorrente da chave composta longa VAI ser significativo 
pro seu hardware, pro seu database, pro seu volume de dados...
 Vc não o diz mas eu IMAGINO que essas refs que sugerem trocar a combinação das 
colunas (Fabrica + Local entrega + Doca + Tipo programa, no seu caso) por uma 
sequence deve ser uma modelagem no estilo : digamos que eu tenho uma tabela 
DETALHES_ENTREGA composta por  ID_ENTREGA, Fabrica , Local entrega, Doca e 
Tipo, aí (voltando ao meu exemplo anterior) vc cadastrou nessa tabela :
 
ID_ENTREGA|Fabrica|Local entrega|Doca|Tipo  |
0001      |FAB01  |BRAS         |D10 | TIPO1|
0002      |FAB01  |VILA CARRAO  |D10 | TIPO1|

 aí na sua tabela-filha, vc NÂO teria essas colunas Fabrica,Local entrega, Doca 
e Tipo e teria só a coluna ID_ENTREGA, que seria FK dessa tabela 
DETALHES_ENTREGA e ao mesmo tempo seria uma UK junto com CNPJ... Aí vc garantiu 
que um CNPJ não pode repetir a mesma conjunção de Fabrica, Local entrega, Doca 
e Tipo, que ENTENDO é o Objetivo, e fez isso SEM um índice composto.... Yep, em 
alguns casos isso FAZ SENTIDO SIM,  não importa qual seja o seu SGBD, o Oracle 
Absolutamente Não É Diferente de outros SGBDs quando se fala de índices b*tree 
: como em qualquer SGBD, cada entrada no índice b*tree TEM que ser ordenada, vc 
TEM que ter branchs para permitir poda binária, etc, e essas coisas TEM SIm um 
overhead...
 Minha Sugestão é : faça TESTES o mais precisos possíveis aí na sua 
máquina/noseu ambiente, com o seu volume de dados esperado, e VERIFIQUE se esse 
overhead JUSTIFICA 'truques' de modelagem como identificar a combinação de N 
campos por um ID sequencial artificial OU se não, um simples índice composto 
alimentando uma PK ou UK composta te atende bem....
 
 []s
 
   Chiappa
  • [oracle_br] Chave Pr... Emerson Sanches emerson.sanc...@gmail.com [oracle_br]
    • [oracle_br] Re:... jlchia...@yahoo.com.br [oracle_br]
      • Re: [oracle... Emerson Sanches emerson.sanc...@gmail.com [oracle_br]
        • Re: [or... jlchia...@yahoo.com.br [oracle_br]
          • Re:... Emerson Sanches emerson.sanc...@gmail.com [oracle_br]
            • ... jlchia...@yahoo.com.br [oracle_br]
              • ... Emerson Sanches emerson.sanc...@gmail.com [oracle_br]
                • ... jlchia...@yahoo.com.br [oracle_br]

Responder a