我对DB中的产品ID类型有疑问。 有些网站使用id为8ace70eb5e46596a,其他网站使用1688200382作为id。 每种方式的优缺点是什么? 我不擅长DB相关知识,所以如果我的问题很愚蠢,请告诉我。 提前谢谢。
答案 0 :(得分:1)
您需要阅读身份生成,这里是对不同类型的快速总结,并提供有关专业人士和会议的一些指示。
密钥表生成
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’s article 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)。