gpt4 book ai didi

java - 使用 ID 而不是 DATE 列有什么缺点吗?

转载 作者:行者123 更新时间:2023-11-29 13:49:44 24 4
gpt4 key购买 nike

我会将存档用户的密码存储在 ArchivalPassword 表中:

CREATE TABLE public.ArchivalPassword (
id SERIAL,
userid INTEGER NOT NULL,
content VARCHAR(100) NOT NULL,
CONSTRAINT archivalpassword_pkey PRIMARY KEY(id),
CONSTRAINT archivalpassword_user FOREIGN KEY (userid)
REFERENCES public.user(id)
ON DELETE CASCADE
ON UPDATE CASCADE
NOT DEFERRABLE
)
WITH (oids = false);

CREATE INDEX fki_archivalpassword_user ON public.archivalpassword
USING btree (userid);

我为每个用户存储有限数量的密码(基于 archived.passwords.limit 属性)。如果用户更改密码,我会从 ArchivalPassword 表中获取存档密码数,如果它大于限制,我会计算必须删除的数量并删除它们。

要求是我删除最旧的密码。问题是我是否可以假设 ID 较小的密码比 ID 较大的密码旧?或者我是否需要添加 EXPIREDAT 列(日期),该列将用于确定需要删除哪个密码(EXPIREDAT 列中日期最早的密码)?

这是假设的 EXPIREDAT 列定义:

expiredat TIMESTAMP(0) WITH TIME ZONE DEFAULT '2017-03-20 00:00:00+01' NOT NULL;

以及ID序列定义:

CREATE SEQUENCE public.archivalpassword_id_seq
INCREMENT 1 MINVALUE 1
MAXVALUE 9223372036854775807 START 1
CACHE 1;

您能看出在所描述的案例中使用 ID 列的任何缺点吗?

最佳答案

假设您的 id 列类似于 BIGSERIAL,那么它有一个序列定义,这是它自动分配下一个 id 的地方。在正常情况下,id 将根据用户更改密码的顺序可靠地分配。然而,可以手动更改序列定义,使其从不同的数字开始,如果有人这样做,则 ID 号将不再代表时间顺序。

我个人会选择使用 EXPIREDAT 列,因为它始终准确且意图明确。不确定你为什么说“但是我必须对日期而不是整数进行排序” - 假设你让 Postgres 进行排序我不确定你为什么认为有很大的不同?

关于java - 使用 ID 而不是 DATE 列有什么缺点吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43021638/

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