O SSMS permite registros duplicados em uma tabela, mas não atualizações subseqüentes

Edit: Quando eu digo "SQL Server", estou realmente falando sobre o Management Studio. Desculpe se isso foi confuso.

Oh, eu odeio quando coisas assim acontecem. Eu estava trabalhando com o SQL Server ontem e testando o comando PIVOT para tentar descobrir como ele funcionava. Então, criei uma nova tabela com quatro colunas e a primeira coluna teria o mesmo valor para as primeiras linhas.

Eu adicionei o "valor1" à primeira linha, primeira coluna, e pressione Enter - sine sem chaves ou restrições foram adicionadas ainda, ele me permitiu entrar para a próxima linha com NULLs para as outras colunas na primeira linha (que é bem). Para minha surpresa, ele também me permitiu inserir "valor1" na segunda linha e entrar - isso deve ser impossível, já que agora existem duas linhas idênticas. No entanto, desde que eu estava apenas brincando, isso não me incomoda. Então eu prossigo para criar quatro linhas como tal:

tabela 1

Col1       Col2      Col3     Col4
---------------------------------
Value1     NULL      NULL     NULL
Value1     NULL      NULL     NULL
Value1     NULL      NULL     NULL
Value1     NULL      NULL     NULL

Obviamente isso é estranho e quebra a teoria relacional, mas eu realmente não me importo, já que esta é apenas uma mesa que eu criei para mexer com ela. No entanto, eu quase puxei meu cabelo para o que aconteceu em seguida. Depois que eu tive esses dados, não pude fazerqualquer coisa para a mesa. Se eu tentei preencher col2, col3 ou col4 em qualquer uma das linhas, o SQL Server gritaria comigo por ter linhas duplicadas: "Nenhuma linha foi atualizada. Os dados na linha 1 não foram confirmados .... O valor da linha (s) atualizado ou excluído não torna a linha única ou altera várias linhas (4 linhas). "

Então, em outras palavras, o SQL Server me permitiu entrar em linhas duplicadas, mas quando tentei atualizar as linhas para torná-las únicas, isso não me permitia, citando que há linhas duplicadas como sua razão. A pior parte é que eu não poderia nem mesmo apagar nenhuma linha (recebo a mesma mensagem de erro). A única solução que encontrei uma vez neste cenário foi excluir a tabela e começar de novo - o que é ridículo.

Minha pergunta é: como esse tipo de comportamento pode existir em um programa bem conhecido que evoluiu ao longo de uma década? Eu sou o único a ser brainless e devo aceitar o comportamento do SQL Server? Para mim isso é inaceitável e o SQL Server nunca deveria ter me permitido inserir linhas duplicadas em primeiro lugar, ou deveria ter permitido que eu atualizasse as linhas duplicadas até que elas fossem todas exclusivas e tente salvar.

Isso não significa que seja algum tipo de post de detesto do SQL Server. É relativamente raro eu ter um comportamento como esse, mas quando o faço, pode realmente me deixar para trás e me deixar louco. Eu simplesmente não entendo porque o programa tem comportamento embutido assim. Por que, no mundo, eu deixei entrar as linhas duplicadas em primeiro lugar se não planejasse me deixar corrigir isso?

Lembro-me de trabalhar com o MS Access no passado e gostaria de ter o mesmo tipo de comportamento estranho e arcaico. Algumas vezes eu tive que copiar grandes quantidades de dados, recriar a tabela e copiá-la de volta só porque o Access me permitia fazer algo que não deveria, e agora está me impedindo de quaisquer alterações para corrigi-lo. - efetivamente produzindo um impasse.

Então, o que está acontecendo aqui? Preciso de algum tipo de mudança de paradigma ao abordar o SQL Server? Sou eu ou o SQL Server, esse é o problema? (Você pode dizer que sou eu, posso aguentar.)

questionAnswers(4)

yourAnswerToTheQuestion