Alcance
Linguagens:.NET, C/SQL, Visual Basic, Visual FoxPro,
Java
DBMSes: DB2 UDB for iSeries, DB2 Universal Database, Informix, Oracle,
SQL Server
Descripci
ón
En alguns casos pode haver vários conjuntos de atributos que cumprem as
condições de uma chave primária. Neste caso dizemos que cada conjunto
é uma chave candidata. Dado que a chave
primária é a que representa a tabela em outras tabelas,
deve-se escolher qual das chaves candidatas será a chave primária.
O conceito de chave candidata -não primária-se implementa em GeneXus permitindo a definição de índices de usário com a
característica ' Unique'. Com
esta funcionalidade se incrementa a produtividade ao evitar que o
usuário
GeneXus tenha que definir e invocar procedimentos de controle de unicidade.
Manipulação de conflitos em tempo de execução
Dada a existência de índices
secundários
" Unique",
pode-se ter um conflito de registro duplicado, não só nas
entradas de novos registros, mas também
nas atualizações, se é que estas atualizam algum
atributo pertencente a uma chave candidata.
Nas transações, tanto em insert como em update, diante de um
conflito de chave candidata duplicada, se mostrará a mensagem "Record already exists" ( na
linguagem correspondente -> Knowledge Base).
Nos grupos 'New' / 'For Each',
diante de um conflito de chave candidata duplicada será executado o código pertencente ao " When
duplicate" se este existe, do
contrário diretamente não será
executada a entrada/atualização.
Note então, a partir desta
versão se suporta o comando " when duplicate" dentro de um grupo " For
Each".
Manipulação de conflitos em
reorganizações
Dada a existência de chaves candidatas, existem novos casos de falha de
reorganizações. GeneXus, num IA detecta
os possíveis casos de conflito e avisa
ao usuário no IAR dos mesmos. Por outro
lado, em tempo de execução, o primeiro
passo da reorganização realiza os
controles necessários de forma a evitar
que as reorganizações cancelem em passos
intermediários.
No caso de detectar conflitos, dá ao usuário a possibilidade de deter a
reorganização.
Considera
ções gerais
As chaves candidatas compostas por vários atributos podem ter alguns dos atributos que a
compõe com valor nulo. Desde o ponto de
vista da unicidade, o valor nulo é
igual a qualquer outro valor.
Quer dizer,
só pode existir um registro com valor
nulo em um atributo que forma parte de uma chave candidata. O diagrama de
navegação de um For Each que tem
condições por
igual ( '=' ) em todos os atributos de uma chave candidata se mostra como For
First.
Exemplos:
Alguns exemplos do uso de chaves candidatas
s
ão:
1- Das pessoas se tem, entre
outros dados, um identificador e a carteira de identidade.
Para modelar esta realidade, pode-se definir uma
transa
ção com
chave primária Identificador (definido
como um autonumerado) e dentro dos atributos secundários um para representar a carteira de identidade.
Depois, se define um índice de
usuário sobre este último, que tem a característica de ser ?Unique?.
Se num site web não se quer
que existam vários usuários (UserId) respondendo ao mesmo
endereço de correio eletrônico (UserMail), um dos dois deveria ser a chave
primária e o outro uma
candidata.