标签: primary-key

为什么使用 int 作为查找表的主键?

我想知道为什么我应该使用 int 作为查找表的主键,而不是仅仅使用查找值作为主键(在大多数情况下是一个字符串)。

我知道使用 nvarchar(50) 而不是 int 会使用更多的空间,如果它链接到一个有很多记录的表。

另一方面,直接使用查找值基本上可以避免我们进行连接。我可以想象,如果总是需要加入,这将是一个很大的节省(我们正在开发一个网络应用程序,所以这很重要)。

除了“标准操作”之外,使用 int 主键(特别是对于查找表)有什么优势?

sql-server primary-key

30
推荐指数
3
解决办法
1万
查看次数

如何在 MySQL 中设置多个字段作为主键?

我有一个带字段的表

员工ID

废话

blahblah2

.....

记录月

记录年

  • 所以每个员工应该只有一个月、一年、Emp# 的匹配条目。怎么摆桌子。

那么如何设置表格,以便 EmployeeID 可以每月更新一次,但永远不能有两个匹配的月份和年份的条目?

mysql primary-key

30
推荐指数
1
解决办法
13万
查看次数

如何更改 SQL Azure 上的现有主键?

我想修改 SQL Azure 表上的现有主键。
它目前只有一列,我想添加另一列。

现在,在 SQL Server 2008 上这是小菜一碟,只是在 SSMS 中做到了,噗。完毕。如果我从 SQL Server 编写 PK,这就是 PK 的样子:

ALTER TABLE [dbo].[Friend] ADD  CONSTRAINT [PK_Friend] PRIMARY KEY CLUSTERED 
(
  [UserId] ASC,
  [Id] ASC
)
Run Code Online (Sandbox Code Playgroud)

但是,在 SQL Azure 上,当我尝试执行上述操作时,它当然会失败:

Table 'Friend' already has a primary key defined on it.

很好,所以我试着放下钥匙:

Tables without a clustered index are not supported in this version of SQL Server. Please create a clustered index and try again.

好的,所以我尝试创建一个临时聚集索引以删除 PK:

CREATE CLUSTERED INDEX IX_Test ON [Friend] ([UserId],[Id])
Run Code Online (Sandbox Code Playgroud)

结果是: …

primary-key azure-sql-database

25
推荐指数
1
解决办法
2万
查看次数

检索所有 PK 和 FK

我有一个大数据库,需要从每个表中提取所有主键和外键。

我有 pgAdmin III。

有没有办法自动执行此操作而不手动查看每个表?

postgresql foreign-key primary-key pgadmin

25
推荐指数
3
解决办法
2万
查看次数

为什么表将其主键用作自身的外键

查看数据库,我遇到了一个表,该表使用其主键作为其自身的外键。

我已经看到一个表可以有一个自身的外键来构建层次结构,但它会使用另一列来引用主键。

由于主键是唯一的,在这种情况下,该行不是只能指向自身吗?这似乎是一个同义反复的链接,因为如果我已经有了该行,那么我已经有了该行。

有什么理由这样做吗?

连接到自身的表

我确信约束是这样写的(不仅仅是查看图表),因为相同的表和列用于定义的两半。

foreign-key sql-server primary-key

25
推荐指数
2
解决办法
4万
查看次数

DBMS中的主键和超级键有什么区别

我是 DBMS 的新手,我仍在学习理论。

我对这个关键业务感到非常困惑,在谷歌搜索之后,我将它缩小到只有 2 个我没有得到的键(主键和超级键)。

我有几个关于 DBMS 的问题。如果您能为我解答这些问题,我将不胜感激。

1) DBMS 中的主键和超级键有什么区别? 如果你能用一个全面的例子来正确解释,非常感谢

2)主键和超级键都可以可以有多个列组合成主键和超级键吗?

3)主键是超级键的子集,反之亦然?

primary-key unique-constraint candidate-key

24
推荐指数
2
解决办法
11万
查看次数

为什么主键值会改变?

我最近一直在研究 ROWGUID 的概念并遇到了这个问题。 这个答案提供了洞察力,但在提到更改主键值时使我陷入了另一个困境。

我的理解一直是主键应该是不可变的,自从阅读这个答案以来,我的搜索只提供了与最佳实践相同的答案。

在什么情况下需要在创建记录后更改主键值?

database-design primary-key

20
推荐指数
4
解决办法
1万
查看次数

为什么主键有自己的名字?

从数学的角度来看,假设一个表最多有一个主键,通过任意名称而不是简单的表属性来引用主键似乎是一种短视的设计决定。

因此,要将主键从非集群更改为集群,反之亦然,您必须首先搜索其名称,而不是删除它并最终读取它。

使用我看不到的任意名称是否有一些优势,或者 DBMS 是否不使用任意名称作​​为主键?

编辑 2011-02-22 (对于那些不想在那里排序的人,2011 年 2 月 22 日):

让我展示一个函数,您可以使用它从表名中导出主键的名称(使用早期的 sql-sever 又名 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
Run Code Online (Sandbox Code Playgroud)

正如 gbn 所说,当您不提供明确的名称时,没有人真正喜欢生成的名称:

create table example_table (
    id int primary key
)

select dbo.get_pk('example_table')  
Run Code Online (Sandbox Code Playgroud)

我刚得到

PK__example___3213E83F527E2E1D
Run Code Online (Sandbox Code Playgroud)

但是为什么 sysobjects 中的名称必须是唯一的。对表及其主键使用完全相同的名称是完全可以的。

这样做,我们不需要设置命名约定,这可能会被意外违反。

现在回答玛丽安:

  1. 我仅使用将集群主键更改为非集群主键的任务作为示例,我需要知道 pk 的实际名称才能删除它。
  2. 事物不需要有专有名称,如果它们可以很容易地唯一表示就足够了。这就是抽象的基础。面向对象编程就是这样。您不需要为不同类的相似属性 …

primary-key

19
推荐指数
3
解决办法
3139
查看次数

如何将现有索引提升为 PostgreSQL 中的主键

我知道如何在表中创建主键,但如何将现有索引设为主键?我正在尝试将现有表从一个数据库复制到另一个数据库。当我显示表格时,底部的索引是这种形式:

"my_index" PRIMARY KEY, btree (column1, column2)
Run Code Online (Sandbox Code Playgroud)

我已经创建了索引:

CREATE INDEX my_index ON my_table (column1, column2)
Run Code Online (Sandbox Code Playgroud)

但我不知道如何使它成为主键......

更新:我的服务器版本是 8.3.3

postgresql index primary-key

19
推荐指数
2
解决办法
2万
查看次数

“唯一键”和“主键”的区别

MySQLUnique KeyPrimary KeyMySQL之间的主要区别是什么?

mysql primary-key unique-constraint

19
推荐指数
2
解决办法
2万
查看次数