Desde una vista matemática, dado que una tabla tiene como máximo una clave primaria, parece ser una decisión de diseño miope referirse a las claves primarias por algún nombre arbitrario en lugar de una simple propiedad de tabla.
Como consecuencia, para cambiar una clave primaria de no agrupada a agrupada o viceversa, primero debe buscar su nombre, luego soltarla y finalmente leerla.
¿Hay alguna ventaja en usar nombres arbitrarios que no veo o hay DBMS que no usa nombres arbitrarios para las claves primarias?
Editar 2011-02-22 (22/02/2011 para aquellos que no quieren ordenar la fecha):
Permítame mostrar la función, con la que puede derivar los nombres de una clave primaria del nombre de sus tablas (usando las primeras tablas del 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 dice gbn, a ninguna persona le gusta realmente el nombre generado, cuando no proporciona un nombre explícito:
create table example_table (
id int primary key
)
select dbo.get_pk('example_table')
Acabo de tener
PK__example___3213E83F527E2E1D
Pero, ¿por qué los nombres en sysobjects deben ser únicos? Sería perfectamente correcto usar exactamente el mismo nombre para la tabla y su clave principal.
Al hacerlo de esa manera, no necesitábamos establecer convenciones de nomenclatura, que podrían violarse accidentalmente.
Ahora responde a Marian:
- Solo utilicé la tarea de cambiar un clúster en una clave primaria no agrupada como un ejemplo en el que necesito saber el nombre real del paquete para poder soltarlo.
- Las cosas no necesitan tener nombres propios, es suficiente si pueden denotarse fácilmente de manera única. Esa es la base de la abstracción. La programación orientada a objetos va de esta manera. No necesita usar nombres diferentes para propiedades similares de diferentes clases.
- Es arbitrario, porque es una propiedad de una tabla. El nombre de la tabla es todo lo que necesita saber si desea usarlo.