Do ponto de vista matemático, desde que uma tabela tenha no máximo uma chave primária, parece ser uma decisão de projeto míope se referir às chaves primárias por algum nome arbitrário em vez de uma propriedade simples da tabela.
Como conseqüência, para alterar uma chave primária de não clusterizada para clusterizada ou vice-versa, primeiro você deve procurar pelo nome, depois soltá-lo e finalmente lê-lo.
Existe alguma vantagem no uso de nomes arbitrários que eu não vejo ou o DBMS não está usando nomes arbitrários para chaves primárias?
Edite 22-02-2011 (22/02/2011 para quem não quiser classificar a data):
Deixe meu show a função, com a qual você pode derivar os nomes de uma chave primária do nome de suas tabelas (usando as primeiras tabelas de sistema sql-sever aka sybase):
create function dbo.get_pk (@tablename sysname)
returns sysname
as
begin
return (select k.name
from sysobjects o
join sysobjects k on k.parent_obj = o.id
where o.name = @tablename
and o.type = 'U'
and k.type = 'k')
end
go
Como afirma o gbn, ninguém gosta realmente do nome gerado, quando você não fornece um nome explícito:
create table example_table (
id int primary key
)
select dbo.get_pk('example_table')
Eu acabei de receber
PK__example___3213E83F527E2E1D
Mas por que os nomes nos sysobjects devem ser exclusivos. Seria perfeitamente correto usar exatamente o mesmo nome para a tabela e sua chave primária.
Fazendo dessa maneira, não precisamos configurar convenções de nomenclatura, que podem ser violadas acidentalmente.
Agora as respostas para Marian:
- Eu apenas usei a tarefa de alterar um cluster em uma chave primária não clusterizada como um exemplo em que preciso saber o nome real do pk para poder descartá-lo.
- As coisas não precisam ter nomes próprios, é suficiente se puderem ser facilmente denotadas com exclusividade. Essa é a base da abstração. A programação orientada a objetos segue esse caminho. Você não precisa usar nomes diferentes para propriedades semelhantes de diferentes classes.
- É arbitrário, porque é propriedade de uma tabela. O nome da tabela é tudo que você precisa saber se deseja usá-lo.