我来自MySQL,在MySQL中,您可以使用AUTOINCREMENT将行的唯一ID作为主键.
我发现Postgresql中没有AUTOINCREMENT,只有SEQUENCE或UUID.I已经读过我们可以使用UUID作为表的主键的地方.这具有掩盖其他用户id的附加优点(因为我想构建将ID作为参数的API).我应该将哪个用于Postgresql?
Pat*_*ick 25
sequencePostgreSQL中的A 与AUTOINCREMENTMySQL 完全相同.A sequence比a更有效,uuid因为它是8字节而不是16字节uuid.您可以将a uuid用作主键,就像大多数其他数据类型一样.
但是,我没有看到这与屏蔽用户ID有何关系.如果要从其他用户屏蔽某个用户的ID,则应该使用 - 例如 - 仔细管理表权限和/或加密ID md5().
如果你想保护一个包含用户数据的表,而不是来自试图猜测其他ID的窥探黑客,那么该uuid类型是一个很好的选择.版本4是最佳选择,因为它有122个随机位(其他6个用于识别版本).您可以像这样创建一个主键:
id uuid PRIMARY KEY DEFAULT uuid_generate_v4()
Run Code Online (Sandbox Code Playgroud)
然后你再也不用担心了.
小智 16
多年来,我使用 PK 和 FK 作为数字序列值开发了数据库应用程序。这非常有效,但近年来在创建云应用程序时,在应用程序之间交换信息,我们将在我们开发的各种应用程序之间进行集成,我们意识到在我们的 API 中使用顺序 ID 最终会产生一种努力。
在某些应用程序中,我们必须找到要通过 API 调用发送的(目标应用程序的)ID,另一方面,我们的数据库表,在我们所有的应用程序中,除了顺序 PK / FK 列之外,还有一个 UUID 列,未在 API 调用中使用。在这种情况下,我们决定重写 API,以便使用 UUID 列。
这解决了一些问题,因为我们的一个桌面应用程序会将它们的数据迁移到另一个云应用程序,这个云应用程序也使用了 PK / FK 列。在迁移此数据时,我们必须更改新序列的 PK/FK 值,因为这些序列可能会在桌面应用程序的值和云应用程序的值之间发生冲突。考虑到这一点,我们选择将云应用程序 PK/FK 切换到 UUID,因为来自桌面应用程序的数据有一个 UUID 列。
然后的问题是通过将 INT 列(PK 和 FK)转换为 UUID 列来转换云应用程序表,而不会丢失表信息。这是一项艰巨的任务,但它变得更容易了,因为我最终构建了一个应用程序,使这种更改更容易。应用程序将每个 PK / FK 整数列更改为 UUID,保留数据和关系。有兴趣的可以点击链接:
https://claytonbonelli.github.io/int_pk2uuid_pk/
您可以将UUID用作表中的主键,因为它是唯一的。但是请记住,与SEQUENCE相比,UUID将占用更多空间。而且它们也不是很快。但是,是的,它们肯定是唯一的,因此可以保证您获得一致的数据。
您还可以参考:
| 归档时间: |
|
| 查看次数: |
18762 次 |
| 最近记录: |