Convenção de nomenclatura para restrição exclusiva

129

As convenções de nomenclatura são importantes, e a chave primária e a chave estrangeira costumam usar convenções óbvias ( PK_Tablee FK_Table_ReferencedTable, respectivamente). A IX_Table_Columnnomeação de índices também é bastante padrão.

E a restrição UNIQUE? Existe uma convenção de nomenclatura comumente aceita para essa restrição? Eu já vi UK_TableName_Column, UQ_TableName_Columne alguém recomendando AX_TableName_Column- não sei de onde isso vem.

Normalmente, eu uso, UQmas não gosto particularmente, e não gosto de ter que defender minha escolha de usá-lo contra um UKadvogado.

Eu simplesmente gostaria de ver se existe um consenso sobre a nomeação mais prevalente ou um bom raciocínio sobre por que um faz mais sentido do que os outros.

Kirk Broadhurst
fonte
1
@ Mitch Qualquer razão para isso? Eu também, mas sempre me pergunto por que ninguém usa U. Para que Qserve?
precisa saber é o seguinte
1
Você poderia fazer a mesma pergunta sobre IX para IndeX ... por que não apenas eu?
Chris J
3
"UQ" é apenas uma abreviação de "UNIQUE". O motivo de duas letras é basicamente um precedente definido por "PK".
Mark Cidade
2
Pessoalmente, acabei usando UX_ * para "Unique indeX", em homenagem ao padrão de IX para "IndeX". Eu particularmente não gosto do UK_ porque sou do Reino Unido. Eu poderia ser persuadido por AK se é isso que a internet gosta.
Tim Abell
@KirkBroadhurst Eu nunca vi uma convenção assim, mas por causa dos votos positivos, ela deve ser comum e servir bem ao objetivo. Mas ter uma chave estrangeira chamada FK_03 não ajuda muito, não seria melhor nomeá-la FK_TargetTable_SourceTable? Você pode por favor elaborar.
CodingYoshi

Respostas:

56

Meu pensamento é que não é uma chave: é uma restrição.

Ele poderia ser usado como uma chave é claro, e identifica com exclusividade uma linha, mas não é a chave.

Um exemplo seria que a chave é "ThingID", uma chave substituta usada no lugar de ThingName a chave natural. Você ainda precisa restringir o ThingName: embora não seja usado como chave.

Eu também usaria UQ e UQC (se agrupado).

Você poderia usar um índice exclusivo e escolher "IXU". Pela lógica empregada, um índice também é uma chave, mas somente quando único. Caso contrário, é um índice. Então começamos com IK_columnnameíndices exclusivos e índices IX_columnnamenão exclusivos. Maravilhoso.

E a única diferença entre uma restrição exclusiva e um índice exclusivo são as colunas INCLUDE.

Edit: Feb 2013. Desde o SQL Server 2008, os índices também podem ter filtros. Restrições não podem

Então, tudo se resume a um dos

  • fique com o UQ conforme o resto do planeta que usa SQL
  • use IK para índices exclusivos (IKC para cluster também) para ser consistente ...
gbn
fonte
1
Você prefere "IXU" a "UIX"?
Hamish Grubijan
133

Minha convenção de nomenclatura para índices e restrições:

  • Chave primária. _PK
  • Índice / restrição exclusivos. _AK {xx}
  • Índice não exclusivo. _IX {xx}
  • Verifique a restrição. _CK {xx}
  • Restrição padrão. _DF {xx}
  • Restrição de chave estrangeira. _FK {xx}

Onde {xx} é um número de sequência de 2 dígitos, começando em 01 para cada tipo de restrição por tabela. A chave primária não recebe um número de sequência, pois pode haver apenas um. Os significados do sufixo alfa de 2 caracteres são:

  • PK: Chave Primária
  • AK: Chave alternativa
  • FK: Chave estrangeira
  • IX: IndeX
  • CK: ChecK
  • DF: DeFault

Geralmente, quero agrupar os dados de catálogo de metadados / sistema pelo objeto de controle e não pelo tipo de objeto.

Nicholas Carey
fonte
10
AK: Chave alternativa é como a superfície de design das ferramentas de dados do SQL Server 2012 as chama também.
Alex KeySmith
15
@AlexKeySmith: Obrigado por explicar por que a Microsoft usa o AK para isso!
TJ Crowder
Nenhum problema @TJCrowder :-)
Alex KeySmith
@TJCrowder, no mundo da modelagem de relacionamento de entidade / banco de dados, é uma chave alternativa , porque, como a chave primária, o conjunto de colunas que compreende a chave alternativa deve ser exclusivo, fornecendo assim identidade [alternativa] para a linha / tupla.
Nicholas Carey
@ NicolasCarey: Não, entendi - assim que vi o comentário de Alex, a luz se acendeu. :-)
TJ Crowder
5

Eu uso UQ. O K no Reino Unido me faz pensar em K como é usado em PK e FK. Bem, depois de pensar no Reino Unido de qualquer maneira; irônico que esse seja um prefixo para UNIQUE quando o Reino Unido apresentar tantas outras associações =)

bitxwise
fonte