微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

sql-server – DB中用于生成主键的表?

您是否曾使用单独的表来“生成”DB的人工主键(以及为什么)?我的意思是拥有一个包含两列,表名和当前ID的表 – 通过简单地用该表名锁定行,获取键的当前值,增加它,您可以使用该表为某些表获取新的“ID”一个,解锁行.为什么您更喜欢这个超过标准整数标识列?

附: “想法”来自福勒斯企业应用架构模式,顺便说一下……

解决方法

这称为Hi / Lo分配.

你可以这样做,你的表上的INSERT触发器从这个表中获取ID,并在你获得你的ID之前或之后递增它,具体取决于你的选择.

当您必须处理多个数据库引擎时,通常会使用此方法. Oracle中的自动增量标识符是通过SEQUENCE,您可以在数据表的BEFORE INSERT TRIGGER中使用SEQUENCE.NEXTVALUE递增.

相反,sql Server具有IDENTITY列,本机自动增量,这由DBE本身管理.

为了使您的软件能够在两个DBE上工作,您必须达到某种标准,然后用于此的最常见的“标准”是对主键的Hi / Lo分配.

这是一种方法.目前,使用NHM的ORM Mapping工具,它通过配置提供,因此您需要更少的关注应用程序和数据库方面.

编辑#1

因为这种操作不能用于全局范围,所以每个数据库数据库模式都必须有这样的表.这样,每个模式都与另一个模式无关.但是,一个模式中的数据不能使用相同的密钥隐式地移向另一个模式,因为它可能与已存在的行冲突.

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

原文地址:https://www.jb51.cc/mssql/78332.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐