/ / Várias restrições de chave primária? - sql-server, tsql

Várias restrições de chave primária? - sql-server, tsql

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 № 1

Tente 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);