首页 > 数据库 > mysql教程 > 如何在PostgreSQL中高效实现复合键自动编号?

如何在PostgreSQL中高效实现复合键自动编号?

Patricia Arquette
发布: 2025-01-07 19:46:42
原创
225 人浏览过

How Can I Efficiently Implement Auto-Numbering for Compound Keys in PostgreSQL?

PostgreSQL 复合键自动编号:一种简化的方法

跟踪个人地址随时间的变化需要为个人历史记录中的每个变化提供唯一的标识符。 虽然存在复杂的自动编号方案,但 PostgreSQL 使用串行或 IDENTITY 列提供了更干净、更高效的解决方案。

避免复杂性

传统方法通常会导致编号系统错综复杂且容易出错。 PostgreSQL 的内置功能提供了一种简化的替代方案。

推荐的解决方案:序列/IDENTITY 列

利用 PostgreSQL 的 serialIDENTITY 列可以显着简化该过程。 这消除了管理复杂序列的需要。

实现示例

以下是如何在 address_history 表中实现此功能:

<code class="language-sql">CREATE TABLE address_history (
  address_history_id serial PRIMARY KEY,
  person_id int NOT NULL REFERENCES people(id),
  created_at timestamptz NOT NULL DEFAULT current_timestamp,
  previous_address text
);</code>
登录后复制

检索序列号

要获取每个人每次地址变更的序列号,请使用 row_number() 窗口函数:

<code class="language-sql">CREATE VIEW address_history_nr AS
SELECT *, row_number() OVER (PARTITION BY person_id ORDER BY address_history_id) AS adr_nr
FROM   address_history;</code>
登录后复制

此视图可直接替换查询中的 address_history 表,为每个地址更改提供序列号 (adr_nr)。

主要改进

  • 使用 timestamptz(带时区的时间戳)以提高准确性和一致性。
  • 删除多余的addressoriginal_address列,简化表结构。 只需要previous_address

以上是如何在PostgreSQL中高效实现复合键自动编号?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板