Pergunta

índices e restrições em MS SQL Server são locais para a mesa que são definidos em. Assim, você pode criar o mesmo índice ou nome da restrição em mais de uma tabela sem problemas.

Principais Foreign restrições (que, como todos devem saber não são chaves, mas restrições) aparecerá na subpasta Chaves e seus nomes parecem estar escopo global.

Alguém sabe por que "chaves" têm escopo global nomes? Eu entendo as diferenças entre chaves e índices. Eu não entendo por que deveria haver tanta diferença um em nome de escopo. Em todos os casos, eles são "local" para a mesa que eles são definidos para.

TIA

Foi útil?

Solução

De acordo com o "SQL-99 Complete, Really" por Peter Gulutzan e Trudy Pelzer, nomes de restrição são qualificados pela esquema em que vivem, ea tabela que a restrição afeta deve viver no mesmo esquema. Mas o nome de restrição não é qualificado por esse nome tabela. O nome da restrição deve ser exclusivo dentro do esquema em que vive.

  • SIM: myschema.some_primary_key
  • NO: myschema.mytable.some_primary_key

Como para "por que" este é o caso, presumo que está relacionado a um tipo de restrição no SQL-99 chamado de ASSERTION. Uma afirmação não "pertencem" a uma única tabela, como é o caso de chave primária, chave estrangeira, e restrições de verificação. Uma afirmação declara uma condição que deve ser verdadeira para qualquer INSERT/UPDATE/DELETE para ter sucesso, e a afirmação pode fazer referência a várias tabelas. Não faria sentido para qualificar esses nomes de restrição por qualquer tabela.

Eu não sei quantas marcas RDBMS implementar afirmações SQL (na verdade eu não conheço um único), mas eles poderiam muito bem estar de acordo com as regras do SQL padrão para nomes de restrição, de modo que no futuro eles podem optar por implementar o recurso afirmação de acordo com o padrão.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top