gpt4 book ai didi

sql-server - 数据库中用于生成主键的表?

转载 作者:太空狗 更新时间:2023-10-30 01:46:21 24 4
gpt4 key购买 nike

您是否曾使用单独的表为数据库“生成”人工主键(以及为什么)?我的意思是有一个包含两列的表,表名和当前 ID - 通过简单地锁定具有该表名的行,获取键的当前值,递增它,您可以获得某个表的新“ID”一个,然后解锁该行。为什么您更喜欢这个而不是标准整数标识列?

附言“想法”来自 Fowlers Patterns of Enterprise Application Architecture,顺便说一句......

最佳答案

这称为高/低赋值。

您可以通过在您的表上插入一个触发器从该表中获取 ID 并在获取 ID 之前或之后递增它来执行此操作,具体取决于您的选择。

这通常在您必须处理多个数据库引擎时使用。 Oracle 中的自动增量标识符是通过 SEQUENCE 实现的,您可以在数据表的 BEFORE INSERT TRIGGER 中使用 SEQUENCE.NEXTVALUE 对其进行递增。

相反,SQL Server 有 IDENTITY 列, native 自动递增,这是由 DBE 本身管理的。

为了让您的软件在两个 DBE 上运行,您必须达到某种标准,然后用于此的最常见的“标准”是主键的 Hi/Lo 分配。

这是其他方法中的一种。如今,借助 NHibernate 等 ORM 映射工具,它是通过配置提供的,因此您无需关心应用程序和数据库端。

编辑#1

因为这种操作不能用于全局范围,所以每个数据库或数据库模式都必须有这样一个表。这样,每个模式都相互独立。但是,一个模式中的数据不能隐式地移动到具有相同键的另一个模式,因为它可能会与已经存在的行发生冲突。

对于安全模式,它访问与另一个模式或用户相同的数据库,因此不应为特定的安全模式存在额外的表。

关于sql-server - 数据库中用于生成主键的表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2434974/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com