D'un point de vue mathématique, étant donné qu'une table possède au plus une clé primaire, il semble être une décision de conception à courte vue de faire référence aux clés primaires par un nom arbitraire au lieu d'une simple propriété de table.
Par conséquent, pour changer une clé primaire de non cluster en cluster ou vice versa, vous devez d'abord rechercher son nom, puis la supprimer et enfin la lire.
Y a-t-il un avantage à utiliser des noms arbitraires que je ne vois pas ou existe-t-il un SGBD n'utilisant pas de noms arbitraires pour les clés primaires?
Edit 2011-02-22 (02/22/2011 pour ceux qui ne veulent pas trier leur date):
Permettez-moi d'afficher la fonction, avec laquelle vous pouvez dériver les noms d'une clé primaire à partir du nom de ses tables (en utilisant les premières tables système 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
Comme gbn déclare qu'aucune personne n'aime vraiment le nom généré, lorsque vous ne fournissez pas de nom explicite:
create table example_table (
id int primary key
)
select dbo.get_pk('example_table')
Je viens de recevoir
PK__example___3213E83F527E2E1D
Mais pourquoi les noms dans les sysobjects doivent-ils être uniques? Il serait parfaitement correct d'utiliser exactement le même nom pour la table et sa clé primaire.
En procédant de cette façon, nous n'avons pas eu besoin de mettre en place des conventions de dénomination, qui pourraient être accidentellement violées.
Répond maintenant à Marian:
- J'ai seulement utilisé la tâche de changer un cluster en une clé primaire non cluster comme exemple où j'ai besoin de connaître le nom réel du paquet pour pouvoir le supprimer.
- Les choses n'ont pas besoin d'avoir des noms propres, il suffit qu'elles puissent être facilement désignées de manière unique. C'est la base de l'abstraction. La programmation orientée objet va dans ce sens. Vous n'avez pas besoin d'utiliser des noms différents pour des propriétés similaires de différentes classes.
- C'est arbitraire, car c'est une propriété d'une table. Le nom de la table est tout ce que vous devez savoir si vous souhaitez l'utiliser.