问题标签 [primary-key]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
11 回答
2701 浏览

database - 有一个没有整数主键的数据库表有什么好的理由吗?

虽然我犯了这个罪,但在我看来,没有任何充分的理由让表没有身份字段主键。

优点: - 无论您是否愿意,您现在都可以唯一地识别表中的每一行,这是以前无法做到的 - 如果没有表上的主键,您将无法进行 sql 复制

缺点: - 表的每一行额外的 32 位

例如,考虑需要将用户设置存储在数据库表中的情况。您有一列用于设置名称和一列用于设置值。不需要主键,但是对于您创建的任何表来说,拥有一个整数标识列并将其用作主键似乎是最佳实践。

除了大小之外还有其他原因每个表不应该只有一个整数标识字段吗?

0 投票
3 回答
4772 浏览

c# - 数据库主键 C# 映射 - String 或 int

在 Northwind Starters Kit 中,数据库中的主键映射到 C# 中的字符串。

这是好习惯吗?如果是这样,为什么?

谢谢,列文卡登

ps:对不起,可能是错误的问题......

在 Northwind Starters Kit 中,一些表具有数据类型为 int 的自动增量主键,而另一些表具有数据类型为 nchar(5) 的非自动增量主键。为什么是这样?好吧,显然一些主键只是代码(nchar(5) 格式)。很抱歉占用了您的时间。

我认为数据类型 int 已映射到 C# 字符串,这对我来说似乎非常错误(但事实并非如此)。

0 投票
4 回答
2684 浏览

mysql - 在 MySQL 中使用文件路径作为主键

我有一个表,它只包含有关文件的信息,因此,由于文件路径是唯一的并且可以识别任何条目,我认为我应该将它用作主键。

虽然,我遇到了一些问题,比如需要指定密钥长度(错误 1170)。我该怎么办?使用整数作为主键,每次我需要访问文件“x”的信息时,执行“where FilePath=x”?

感谢您花时间阅读我的问题。

0 投票
2 回答
172 浏览

asp.net - 具有多种父母类型的评论表

我的网站 (ASP.NET/C#/MS-SQL 2005) 有多个允许评论的部分(用户配置文件、图像页面、视频等)。我想将所有内容存储在一个评论表中。

我的问题是将评论链接回其父级。用户配置文件的主键是唯一标识符,而图像和视频使用整数。我想有一个从评论到其父级的外键关系。

什么被认为是最好的做法?

0 投票
5 回答
271 浏览

sql - 我应该使用没有 GUID 的自然身份列吗?

可以用 2 个外键列定义表主键,这些列的组合必须是唯一的吗?因此不添加新的 id 列(Guid 或 int)?

这有负面影响吗?

0 投票
10 回答
890 浏览

sql - 如果 2^32 还不够怎么办?

如果表中有这么多条目,那么 2^32 不足以满足给定时间段(日、周、月……)内的 auto_increment ID 怎么办?
如果 MySQL 提供的最大数据类型不够用怎么办?

我想知道我应该如何解决这样一种情况:我的表中添加了这么多需要唯一 ID 的条目,但我在一个时期内填写了我的数据类型?

我怎样才能在 MySQL(或任何其他系统)内实现无限数量的唯一 ID 或至少成倍增加?

理想情况下,我希望像

这成倍地增加了条目的数量。

你如何应对这种情况?
请记住 - 要求是任何条目都有唯一的 ID。

0 投票
3 回答
1704 浏览

sql-server - 在 SQL 2005 中删除集群主键时会发生什么

我有一个 PK 约束——两列上的聚集索引——我正在删除它。一个小时后该命令仍在运行。我会认为,因为我只是删除一个约束,所以操作几乎是瞬时的。当我放弃 PK 时,有人可以向我解释一下引擎盖下到底发生了什么吗?

0 投票
4 回答
19564 浏览

sql - 在 SQL 2005 中更改聚集索引 (PK) 的最佳方法

我有一个表,它在两列上有一个聚集索引 - 表的主键。定义如下:

我想删除此聚集索引 PK 并添加如下聚集索引并使用非聚集索引添加主键约束,如下所示。

我打算只删除 PK 聚集索引,然后添加新的聚集索引,然后添加非聚集主键索引,但我了解到删除现有聚集索引会导致表数据重新排序(请参阅此处的答案What当我在 SQL 2005 中删除集群主键时发生),我认为这不是必需的。该表正在敲 1 TB,所以我真的想避免任何不必要的重新排序。

我的问题是,从现有结构到所需结构的最佳方式是什么?

编辑:只是想澄清一下。该表为 1TB,不幸的是我没有空间来创建临时表。如果有办法在不创建临时表的情况下做到这一点,请告诉我。

0 投票
13 回答
11703 浏览

database - 选择最佳主键 + 编号系统

我们正在尝试为我们正在创建的资产系统提出一个编号系统,在办公室对此话题进行了一些激烈的讨论,所以我决定询问 SO 的专家。

考虑下面的数据库设计会是更好的选择。

替代文字

示例 1:使用自动代理键。

示例 2:使用程序生成的 PK

(这00000001.1意味着它是道路的第一段。每次添加新路段时都会增加,例如00000001.2

示例 3:两者都使用(添加新列)

只是一点背景信息,我们将在报告和其他文档中使用Road Numberand Segment Number,因此它们必须是唯一的

我一直喜欢保持简单,所以我更喜欢示例 1,但我一直在读到你不应该在报告/文档中公开你的主键。所以现在我更多地按照示例 3 的思路进行思考。

我也倾向于示例 3,因为如果我们决定更改资产编号的生成方式,则不必对主键进行级联更新。

你认为我们应该怎么做?

谢谢。

编辑:感谢大家的精彩回答,对我帮助很大。

0 投票
6 回答
3912 浏览

sql-server - 公司-员工数据库设计

我正在尝试构建一个具有公司数据表和员工数据表的 SQL 2005 数据库。每个公司都应该有一个员工 1、员工 2,依此类推。我意识到每个 Employee 记录都会有他们的 EmployeeID 和他们的 CompanyID 的 PK,但是我一生还没有确定这样做的最佳方式吗?

有任何想法吗?

让我澄清一下

每个公司都可以有自己的员工 #1、#2 等。假设我有一个存储过程,它通过传入公司 ID 和请求的员工 ID 返回特定员工。

请记住,公司 1 可以有员工 1,而公司 2 可以有不同的员工 1,我该怎么做?如何为每个公司的员工提供唯一的增量主键?