从数学的角度来看,假设一个表最多具有一个主键,那么用某种任意名称而不是简单的表属性来引用主键似乎是一个短时的设计决策。
因此,要将主键从非集群键更改为集群键,反之亦然,您必须首先搜索其名称,然后删除它,最后读取它。
使用我看不到的任意名称是否有一些优势,或者DBMS不对主键使用任意名称?
编辑2011-02-22 (对于那些不想在那里排序的人,则为02/22/2011):
让我展示一下该函数,您可以使用该函数从其表名派生主键的名称(使用早期的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
如gbn所述,当您不提供显式名称时,没有人真的喜欢生成的名称:
create table example_table (
id int primary key
)
select dbo.get_pk('example_table')
我刚得到
PK__example___3213E83F527E2E1D
但是,为什么sysobjects中的名称必须唯一。对表及其主键使用完全相同的名称将是完全可以的。
这样,我们就不需要建立命名约定,而这可能会被意外违反。
现在回答玛丽安:
- 我仅以将集群更改为非集群主键为例,在该示例中,我需要知道pk的实际名称才能删除它。
- 事物不需要适当的名称,只要可以轻松地进行唯一表示就足够了。那是抽象的基础。面向对象的编程就是这样。您无需为不同类的相似属性使用不同的名称。
- 它是任意的,因为它是表的属性。该表的名称就是您要使用的所有信息。