gpt4 book ai didi

sql - postgres 会自动为每一行生成一个 id 吗?

转载 作者:行者123 更新时间:2023-11-29 14:08:04 25 4
gpt4 key购买 nike

一般来说,我是 postgres 和 SQL 的新手。我来自 NoSQL。更具体的mongodb。在 mongodb 中,每个文档都有一个由 mongodb 自动生成的唯一 ID。

postgres 行是否自动具有唯一 ID 还是您必须自己生成它们?

最佳答案

@YulePale,搬到一个有着不同规则的环境总是有点……累人。他们声称这对您的大脑有好处,但学习一种新的范式并非一日之功。

我之所以做出回应,是因为您一直在询问“在 PostgreSQL 中,如果数据相同,您可以拥有无​​法唯一标识的行?”的变体?公平的问题,但重要的是将此视为功能。用简单的语言来思考,您如何区分相同的事物?它们是无法区分的,这就是相同的意思。

关系数据库中的全部要点是具有相同的行。想象一下,您有两个完全相同的文档,并将它们存储在两行中。它们有什么不同?他们没有什么不同。那你为什么有两行?如果有额外的信息来区分它们,那么这行也可能有一些东西。也许它们来自不同的来源,因此您将路径与每个文档一起存储。

找出数据中的内容来唯一标识每一行是表设计的起点。它可能是一个“自然”领域,但这种情况非常罕见。它可能是字段的组合。

为了方便,生成一个 ID(序列号或 UUID)是司空见惯的事情。但是,将唯一数字固定在相同的行上是一个糟糕的计划。

1 Don Perkins 123 Main St Waltham MA
2 Don Perkins 123 Main St Waltham MA

前面的 ID 使行唯一,但数据不是唯一的。假装那个地址真的只有一个 Dan Perkins。你现在有坏数据。这种事情总是以泪结束。

Mongo 范式和关系数据库设计是不同的。尝试掌握关系设计会对您自己有帮助。然后,您可以真正利用 Postgres 等工具的强大功能。外键、JOINCHECK 约束可能会成为您的 friend 。

我不知道您会在哪里找到它们,但是在过渡期间与从 Mongo 迁移到 RDBMS 的人核实可能对您很有帮助。我不了解 Mongo,但有很多人同时了解 Mongo 和 Postgres。事实上,一个重要的 Postgres 贡献者也在支持您可能感兴趣的工具?

https://www.torodb.com/

我刚刚查了一下,听起来 MongoDB 为行 ID 生成了一个以 12 为底的半随机数:

https://docs.mongodb.com/manual/reference/method/ObjectId/

如果你喜欢那种东西,在 Postgres 中一个不错的选择是 16 字节的 UUID。请注意,没有可以从 V4 UUID 恢复时间戳数据。如果您需要时间戳,您也应该为它们添加一列。

这两个列都可以设置为在您创建记录时自动生成值,就在表的定义中。您已经有了一堆带有示例的答案。

关于sql - postgres 会自动为每一行生成一个 id 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58974078/

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