0

我对数据库中的产品 ID 类型有疑问。一些网站使用 8ace70eb5e46596a 之类的 id,而其他网站使用 1688200382 作为 id。每种方式的优缺点是什么。我不擅长数据库相关知识,所以如果我的问题很愚蠢,请告诉我。先感谢您。

4

1 回答 1

1

您需要阅读 Identity Generation,这里是不同类型的快速摘要,并带有一些关于 pro 和 con 的指针。

KeyTable 身份生成

KeyTable 身份生成使用数据库中存储当前身份值的单个表。这允许应用程序保护身份块并使用它们来设置系统中新创建实体的身份值。这是有效的,因为数据库中的每个身份,即使在不同的表中,都是唯一的。KeyTable 适用于数字标识类型(Int32 和 Int64)。

序列和多序列身份生成

序列标识生成类似于 KeyTable,但由数据库引擎原生提供。这意味着使用序列身份生成仅限于支持它的数据库:Oracle 和 PostgreSQL。序列标识生成与 KeyTable 具有相似的特性,但由于许多数据库不支持序列对象,因此不可移植。

Guid 和 GuidComb 身份生成

GUID 标识非常适合需要强唯一性(例如,支持复制)的系统,并且从生成的角度来看也非常实用,因为 LightSpeed 永远不需要咨询数据库来分配 Id。然而,虽然这对许多系统来说不是问题,但 GUID 可能会对应用程序的美观性产生影响。例如,如果您正在开发 Web 应用程序,您可能不希望在您的 URL 中出现 GUID。显然,GUID 方法仅适用于 Guid 标识类型。

Guid 标识方法使用 .NET GUID 生成器来生成 Id。

GuidComb 标识方法使用Jimmy Nilsson 的文章 The Cost of GUIDs as Primary Keys 中描述的替代算法,用随机性换取数据库 INSERT 性能。COMB 方法以在插入新的主键值时降低索引成本的方式生成 GUID。如果您想要 GUID Id、拥有非常大的数据集并且正在执行大量插入,请考虑使用 GuidComb。

IdentityColumn 身份生成

标识列标识生成支持自动递增标识列。标识列标识生成仅限于支持自动递增列的数据库:SQL Server、SQL Server Compact、VistaDB、PostgreSQL、MySQL 和 SQLite。身份列适用于数字身份类型(Int32 和 Int64)。

参考: http: //www.mindscapehq.com/documentation/lightspeed/Controlling-the-Database-Mapping/Identity-Generation

于 2014-07-28T01:11:35.313 回答