Da un punto di vista matematico, dato che una tabella ha al massimo una chiave primaria, sembra essere una decisione progettuale miope fare riferimento alle chiavi primarie con un nome arbitrario anziché una semplice proprietà della tabella.
Di conseguenza, per cambiare una chiave primaria da non cluster a cluster o viceversa, devi prima cercare il suo nome, quindi rilasciarlo e infine leggerlo.
C'è qualche vantaggio nell'uso di nomi arbitrari che non vedo o ci sono DBMS che non usano nomi arbitrari per le chiavi primarie?
Modifica 22/02/2011 (22/02/2011 per coloro che non vogliono ordinare lì la data):
Lascia che mostri la funzione, con la quale puoi derivare i nomi di una chiave primaria dal nome della sua tabella (usando le prime tabelle di 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
Come afferma gbn, a nessuno piace molto il nome generato, quando non si fornisce un nome esplicito:
create table example_table (
id int primary key
)
select dbo.get_pk('example_table')
ho appena ottenuto
PK__example___3213E83F527E2E1D
Ma perché i nomi negli oggetti di sistema devono essere univoci. Sarebbe perfettamente OK utilizzare esattamente lo stesso nome per la tabella e la sua chiave primaria.
In questo modo, non è stato necessario stabilire convenzioni di denominazione, che potrebbero essere violate accidentalmente.
Ora risponde a Marian:
- Ho usato solo il compito di cambiare un cluster in una chiave primaria non cluster come esempio in cui ho bisogno di conoscere il nome effettivo del pk per poterlo rilasciare.
- Le cose non hanno bisogno di avere nomi propri, è sufficiente che possano essere facilmente indicate in modo univoco. Questa è la base dell'astrazione. La programmazione orientata agli oggetti va in questo modo. Non è necessario utilizzare nomi diversi per proprietà simili di classi diverse.
- È arbitrario, perché è una proprietà di una tabella. Il nome della tabella è tutto ciò che devi sapere se vuoi usarlo.