问题标签 [primary-key-design]
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.
sql-server-2008 - 大容量 SQL Server 2008 的关键数据类型?
我在为大量数据设计数据库的过程中,我想知道主键使用什么数据类型?
将进行表分区,数据库最终将被集群化,并将热故障转移到替代数据中心。
编辑
表格 - 考虑多个时间段和多个事物的聊天系统,与多个用户聊天的时间段和事物。
指数问题是我正在考虑的 - 即某些东西可能会在短时间内生成数十亿行。即在我们可以更改数据库或 DBA 做 DBA 事情之前
马克 - 我和你一样关心 GUID - 我不喜欢 GUID 飞来飞去的编码。
sql - 数据库设计和非数字主键的使用
我目前正在为客户和网站管理应用程序设计数据库表。我的问题是关于使用主键作为表的功能部分(而不是仅仅因为)为每个表分配“ID”号。
例如,到目前为止,这里有四个来自数据库的相关表,其中一个使用传统的主键编号,其他的使用唯一名称作为主键:
如您所见,4 个表中有 3 个使用它们的“名称”作为主键。我知道这些将永远是独一无二的。在 2 种情况下(*_status 表)我基本上使用 ENUM 的动态替换,因为状态选项将来可能会改变,对于“网站”表,我知道网站的“名称”将始终是独一无二的。
我想知道这是否是合理的逻辑,当我知道名称始终是唯一标识符或灾难的秘诀时摆脱表 ID?我不是经验丰富的 DBA,因此任何反馈、批评等都会非常有帮助。
感谢您抽时间阅读!
.net - 为将要合并的分布式数据创建唯一身份的最佳方法?
我有一个集中托管的数据库(MS SQL Server),分布式客户端通过 Internet 将数据保存到其中。当 Internet 连接中断时,客户端开始将新数据本地存储到 SQLite 实例中。当 Internet 连接恢复联机时,累积的本地数据将移动到中央数据库(插入)。
在这种情况下处理唯一 ID 的最佳方法是什么?其他重要信息:
本地客户端可以在离线时记住他们的本地数据库 ID 以进行链接;因此,本地 ID 必须生成为全局唯一的。
当合并回中央数据库时,不应更改本地数据库中的唯一 ID。
未来可能会根据设备选择不同类型的数据库用于本地操作 - 例如 JavaDb、TextFileDb 等;因此我认为这个解决方案不应该使用单一的专有数据库功能。
- 当更改合并回中央数据库时,所有记录都必须具有唯一的 ID。
对于这个问题,假设一个简单的表以MyTable
字段命名:(ID
主键/唯一键,无论应该是什么类型)和Field1
, Field2
,Field3
后者并不重要。
首先想到的是使用 GUID。有没有比这更好的模式或实践或更好的方法来执行此操作?
编辑: 使用 Microsoft .NET 和 ADO.NET
mysql - MySQL - 使用字符串作为主键
我已经在 Stack Overflow 上看到过类似的帖子,但不太满意。
假设我提供 Web 服务。http://foo.com/SERVICEID
SERVICEID 是用于引用服务的唯一字符串 ID(base 64,小写/大写 + 数字),类似于 URL 缩短服务如何为 URL 生成 ID。
我了解比较字符串与整数存在固有的性能问题。
但我很好奇如何最大限度地优化 String 类型的主键。
我正在使用 MySQL,(目前使用 MyISAM 引擎,尽管我承认不了解所有引擎差异)。
谢谢。
出于我的目的更新字符串实际上只是一个 base62 编码的整数,所以主键是一个整数,并且由于你不可能超过 bigint 的大小,所以使用其他任何东西都没有太大意义(对于我特定用例)
sql-server - 向现有表添加新主键
我有以下详细信息的表格
表名EMPLOYEE
和列
现在我必须在该表中添加一个额外的列ADD_UID
并使其成为主键
我正在使用这个查询但失败了。
表 ' EMPLOYEE
' 上已经定义了一个主键。
编辑
这里的想法是新列应该是唯一的,这样如果它失败我可以抛出 _KEY_VIOLATION 以便完成一些代码操作
asp.net - SQL 主键
因此,我和一位同事正在争论哪种方式更适合生成作为 GUID 的主键。
我们将 .NET 4.0 与 Entities 4 一起使用,并使用存储的过程来进行选择/插入/更新。
他想在代码中创建 GUID 主键,并使用 Guid 类或/和使用一些创建的 Sequential GUID 类将其作为插入的一部分传回。
我希望 SQL Server 在插入时使用 newid() 或 newsequentialid() 创建 GUID。
我反对他的方式的论点是,如果您必须进行多次插入,则必须进行往返以获取每个插入的 guid,以便为外键约束保持这种关系。另外,使用这种方式,您必须为每个插入进行多次往返。
他关于使用 SQL 执行的论点是,在插入发生之前他无法访问密钥,并且必须等待插入发生才能将主键 guid 重新用于代码的其他部分。这样,您可以与存储过程建立一个连接,并处理所有插入。
那么,哪种方法更适合单次插入?哪种方法更适合事务中的多次插入?
c# - 在 SQL Server 中跳过完全相同的记录
我有一组通过 C# 中的 SqBulkCopy 导入 SQL Server 的文本文件。有些记录出现在多条记录中,我想跳过这些记录,而不是抛出错误并停止。
对于有明确的“uniqueID”/主键的情况,一切都很好——我使用了“WITH (IGNORE_DUP_KEY = ON)”,效果很好。
但是,在这种情况下,无法确定这样的 uniqueID,除非将所有字段连接在一起,或者创建一个涉及所有字段的复合键。我试图获得一个唯一的 transactionID 或类似的,但没有一个可用。有时记录相同,但字段中的一位数字已更改;在这种情况下,我希望它插入表中。
我认为可能有比针对所有字段创建密钥更好的方法?如果我这样做了,这意味着日期、字符串、值等都必须混合在一起才能形成密钥。
查询行并散列值以与我的输入行的散列进行比较是另一种想法,但我敢肯定性能会很糟糕:)
有人对如何最好地做到这一点有建议吗?
谢谢
mysql - 优化非常大的表查询
我有一张接近 2000 万条记录并且还在不断增长的表。该表设置为 innodb。两个主要字段上有一个主索引:
尽管记录数量众多,但对该表的大多数查询都非常快,但以下情况除外:
这将删除特定表单的所有条目数据。
目前这需要超过 45 秒,即使条目表没有返回结果。
我的问题是entries_to_fields
我可以对结构进行简单的更改,还是可以进一步优化我的查询。
mysql - MYSQL - 使用字符串作为主键的问题
可能重复:
Mysql中的字母数字顺序
我的表格对我的记录进行了错误的排序。主键是一个字符串,它是一个字符,它与一个从 1 开始的数字组合,例如:F1。当它得到两位数时就会出现问题,例如:F10。数据库只检查前两个字符并丢弃其余字符。前任:
它应该看起来像这样 F1,F2,F3,...F9,F10,F11 等。
看起来像这样 F1、F10、F11、F12、....、F2、F3、F4 等。
因此,如果您有任何想法,请分享。
注意:使用 MySql 5 服务器和 MySql Workbench 5.2
下面是数据库中一张表的脚本代码: