Há uma nova propriedade exclusiva que precisamos adicionar, que é relevante apenas para um subconjunto específico (menos de 1%). Achamos melhor adicionar uma nova tabela que será 1-1 do que adicionar uma nova coluna que terá nulos 99% das vezes.
Uma nova tabela é a maneira preferida?
Se uma das seguintes condições for verdadeira, sim, vá em frente e crie uma tabela separada.
Se nada disso for verdadeiro, você poderá usar uma
SPARSE
coluna.Aqui está BOL em colunas SPARSE . Além disso, você pode querer olhar para COLUMN SETS . Uma coluna esparsa é uma coluna otimizada para valores NULL e de acordo com BOL não ocupa espaço quando o valor é NULL. Existem tabelas no BOL que lhe darão uma ideia da economia real gerada pelo uso de
SPARSE
colunas.Tudo isso dito, se você quiser usar uma mesa separada, certamente pode. As desvantagens são que você perderá algum espaço dependendo de quão grande é sua chave primária (o mínimo que você precisará incluir na nova tabela junto com a coluna extra) e é difamatório ser um pouco mais lento por causa do extra Junte.
Se sua principal preocupação for a eficiência do armazenamento e recuperação de dados, recomendo adicionar uma nova
sparse
coluna na tabela existente. No entanto, se você estiver lidando com o sistema OLTP, poderá ter bons motivos para escolher uma nova tabela com relação 1-0..1.Por exemplo, existem muitos aplicativos herdados usando o modelo existente que podem ser corrompidos devido à nova coluna. Além disso, se uma nova coluna for qualquer blob,
select *
no aplicativo legado (apesar de não ser uma prática muito boa, essas consultas são bastante comuns) afetará o desempenho.Em segundo lugar, a nova coluna pode ser acessada com um padrão diferente (digamos, você lê principalmente as colunas antigas, mas executa muitas atualizações da nova coluna).
Além disso, vi muitas tabelas que costumavam ser mais ou menos normalizadas no início, mas acabaram com centenas de colunas; algumas das colunas não foram mais usadas, outras não cabem no modelo (melhor ainda dizer que o modelo foi destruído). Esta nota provavelmente está fora do escopo da questão, mas na minha opinião vale a pena mencionar ...