问题标签 [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 投票
4 回答
5484 浏览

sql-server - SQL Server 中唯一标识符 ID 列上的聚集主键

如果表上的 ID 列是唯一标识符 (Guid),那么在 ID 列上创建聚集主键有什么意义吗?

鉴于它们是全球唯一的,排序将如何工作?

0 投票
5 回答
2082 浏览

sql-server - 同时使用 GUID 和自动递增整数

我一直在研究使用 GUID 作为数据库中的主键。目前看来,利大于弊。但是,我发现 GUID 可能不是我想要的。

在我的应用程序中,用户应该能够根据用户友好的 ID 识别对象。因此,例如,如果他们想在不输入全名的情况下获得特定产品,他们可以使用产品的 ID。对于这样的事情,GUID 不容易记住。

我一直在考虑的解决方案是同时使用 GUID 和自动递增整数。GUID 将是行的主键,而自动递增整数将是应用程序过滤函数使用的索引。但是,所有 SQL SELECT、UPDATE、DELETE 语句都将使用 GUID。

我想使用 GUID 的主要原因是防止合并两个数据库时发生冲突。如果 Database #1 和 Database #2 都具有 Product #2,则导入器脚本必须更改 ID 和引用它的所有外键。使用 GUID,我只需要更改表本身中的用户友好 ID,而外键将使用每个导入记录唯一的 GUID,因此无需修改即可工作。

所以,我的问题是:具有自动递增整数索引和 GUID 主键是否存在任何重大问题(除了 GUID 字段的大小和简单的页面碎片)?

0 投票
5 回答
2726 浏览

entity-framework - 实体框架和字符串键之间的关联

我是实体框架的新手,并且是那个mather的ORM。在我参与的项目中,我们有一个遗留数据库,它的所有键都是字符串,不区分大小写。

我们正在转换为 MSSQL 并希望将 EF 用作 ORM,但遇到了问题。

这是一个说明我们的问题的例子:

TableA 有一个主字符串键,TableB 有一个对该主键的引用。

在 LINQ 中,我们编写如下内容:

如果 TableA 包含读取“A”的主键,并且 TableB 包含引用 TableA 但在引用字段“a”和“A”中具有不同大小写的两行。

在我们的项目中,我们希望两行都出现在结果中,但只有匹配大小写的行才会出现在结果中。

使用 SQL Profiler,我注意到两行都被选中。

有没有办法告诉实体框架键不区分大小写?

编辑:
我们现在已经用 NHibernate 对此进行了测试,并得出结论 NHibernate 可以使用不区分大小写的键。所以 NHibernate 对我们来说可能是一个更好的选择。
然而,我仍然有兴趣找出是否有任何方法可以改变实体框架的行为。


感谢您的回答!

问题是,如果我们现在将该约束添加到数据库,遗留应用程序可能会因为它的构建方式而停止工作。如果可能的话,对我们来说最好的办法是改变 EF 的行为。我猜这是不可能的,但我正在试一试。


问候,
弗雷德里克

编辑:我为自己的问题添加答案的原因是我在成为注册用户之前添加了这个问题,并且当我注册了我的帐户时,我无法添加评论或编辑我的帖子。现在帐户已合并。

0 投票
6 回答
4316 浏览

mysql - 如何使用 Rails ActiveRecord 迁移将主键插入 MySQL 数据库?

我需要为图像文件表创建 AR 迁移。图像被检入到源代码树中,并且应该像 attachment_fu 文件一样工作。既然如此,我正在 /public/system 下为它们创建一个层次结构。

由于 attachment_fu 生成链接的方式,我需要使用目录命名约定来插入主键值。如何覆盖 MySQL 中的自动增量以及任何 Rails 魔法,以便我可以执行以下操作:

0 投票
4 回答
25808 浏览

hibernate - 休眠,更改标识符/主键

当我尝试更改我@ID@Entity.

我知道我正在更改表中的主键。我正在使用 JPA 注释。

我通过使用这个单一的 HQL 查询解决了这个问题:update Table set name=:newName where name=:oldName

而不是使用更多的OO方法:

知道差异是什么吗?

0 投票
9 回答
309683 浏览

sqlite - 多列上的 Sqlite 主键

在 SQLITE 中的多于 1 列上指定主键的语法是什么?

0 投票
6 回答
544 浏览

database-design - 数据库主键-> 身份字段和名称字段?

我所有的表都有Id某种类型的字段(UserId, PostId, FooId等)。我通常把它设为 Primary Key

我有一张桌子叫做Countries. 它有

现在,我知道Name必须是独一无二的。所有国家名称都是唯一的。PrimaryKey如果我制作==CountryId ASC 和 , 它是好/坏/ru-rohName ASC吗?

如果它很好,有人可以解释为什么它更好,而不仅仅是IdPK?只是它确保了数据的完整性(例如,表中不存在两个国家名称)。如果不好..为什么?

非常感谢。

0 投票
1 回答
191 浏览

database-design - RDBMS 密钥混淆

我正在尝试整理我公司网站背后的数据库。

我们与站点和居民打交道。目前,站点引用作为外键包含在 Residents 表中,但显然,这仅在 1NF 中。

站点引用的格式为 nnnnn(例如 12345)。每个居民在 nnn 形式的站点中都有自己的参考(从 001 开始,到最大 999 结束)。

问题是,当我把它带到 2NF 时:

站点(参考、名称、费用)

驻留(站点参考,驻留参考,)

居民(参考,地址,用户名,密码)

居民参考永远不会唯一标识一个居民,如果有 2 个站点,那么将有 2 001。我不能使用用户名,因为这个字段只填充一次(如果!)他们已经注册了我们的网络服务。我只想为居民引入一个新的自动编号 ID,但我有些烦恼的是,有一个更优雅的解决方案。谁能建议它是什么?

0 投票
2 回答
3083 浏览

c# - 重置主键

我试图在网上找到答案,但显然无法完成(我的意思是在应用程序级别,而不是数据库)。我需要完全清除我的数据集并同时重置主键。有任何想法吗?

或者,我可以使用的一种技巧是重新初始化数据集,但这似乎也不可能,因为数据集在应用程序中的不同类之间共享(我在 Program.cs 中创建共享数据集)。

谢谢

法鲁克

更新:

好的,我试过这个:

MyDataSet sharedDS = new MyDataSet();

. . .

清洁DS()

{

}

我的原始问题已解决,但现在我得到一个 System.ArgumentException for Column1 does not belongs to Table1 在那里我可以看到 DataSet Viewer 中的列以及填充的行。另请注意,我可以手动重新创建整个数据集,但我仍然得到同样的错误。有任何想法吗?

0 投票
3 回答
10053 浏览

sqlite - Sqlite3:插入时禁用主键索引?

我有一个 Sqlite3 数据库,其中包含一个表和一个由两个整数组成的主键,我正在尝试向其中插入大量数据(即大约 1GB 左右)

我遇到的问题是,创建主键还隐式创建了一个索引,在我的情况下,在几次提交后,它会使插入陷入困境(那是因为数据库文件在 NFS 上.. sigh)。

所以,我想以某种方式暂时禁用该索引。到目前为止,我最好的计划是删除主键的自动索引,但是 SQLite 似乎不喜欢它,如果我尝试这样做会引发错误。

我的第二个最佳计划是应用程序在网络驱动器上制作数据库的透明副本,进行修改然后将其合并回来。请注意,与大多数 SQlite/NFS 问题相反,我不需要访问并发。

做这样的事情的正确方法是什么?

更新:

我忘了指定我已经在使用的标志:

更新2: 我实际上是分批插入项目,但是下一批的提交速度比前一批慢(我假设这与索引的大小有关)。我尝试批量处理 10k 到 50k 元组,每个元组是两个整数和一个浮点数。