Eu tenho uma mesa assim:
CREATE TABLE BACAEN
(
CAEN_KEY INT PRIMARY NOT NULL,
CAET_KEY INT,
BUUN_KEY INT
)
Eu já defini a chave primária em CAEN_KEYcoluna. O que eu também preciso é ter registros exclusivos para CAET_KEY e BUUN_KEY juntos. (Portanto, a combinação com o mesmo CAET_KEY / BUUN_KEY é permitida apenas uma vez). A maneira mais fácil seria gerar mais uma chave primária composta, mas isso não é possível porque o sql server não permite várias restrições de chave primária. Quais são as alternativas para isso?
Por favor note: eu não posso deixar cair a restrição de chave primária em CAEN_KEY.
Respostas:
3 para resposta № 1Tente uma chave única em vez disso. Altere o design da seguinte forma
CREATE TABLE BACAEN
(
CAEN_KEY INT PRIMARY KEY,
CAET_KEY INT NOT NULL,
BUUN_KEY INT NOT NULL,
CONSTRAINT uq_BACAEN UNIQUE(CAET_KEY , BUUN_KEY );
)
Agora, as colunas CAET_KEY e BUUN_KEY estarão tendo uma combinação exclusiva, assim como não poderão conter valores NULL, pois eu os especifiquei como NOT NULL
Se quiser permitir valores NULL para o CAET_KEY e BUUN_KEY, isso também é bom, mas você pode ter apenas 1 registro com NULL em ambos os campos
1 para resposta № 2
ALTER TABLE youtablename ADD CONSTRAINT uq_yourtablename UNIQUE(CAET_KEY , BUUN_KEY );
ps. Se sua tabela já estiver preenchida, remova todas as entradas que estiverem em conflito com essa restrição.
1 para resposta № 3
Use a seguinte consulta para criar um novo índice exclusivo na sua tabela
CREATE UNIQUE INDEX IDX_Composite_index ON BACAEN (CAET_KEY,BUUN_KEY);
a consulta acima funciona mesmo se a tabela estiver preenchida, mas não deve haver duplicatas.
0 para a resposta № 4
criar índice exclusivo na sua mesa
CREATE UNIQUE INDEX indexname ON BACAEN (CAET_KEY,BUUN_KEY);