我在Postgres的PubMed上存储期刊论文数据,我想存储论文的发布日期。但是,有时日期为just a year(请参阅PubDate
字段),有时是一个月和一年,有时是一天,一个月和一年。
将数据存储在我的数据库中是一种明智的方法吗?
如果我使用Postgres日期字段,我显然也需要指定日期和月份,但在某些情况下我需要发明它们,我不喜欢丢失信息的想法关于日期的精确度。
出于我的目的,我认为我只需要一年,但我不知道为了所有可能的未来目的是真实的。
也许我应该只为day
,month
和year
设置文字字段,如果我需要,我可以随时将它们转换为日期字段吗?
答案 0 :(得分:3)
我会将其存储为date
并存储精度。
例如:
CREATE TYPE date_prec AS ENUM ('day', 'month', 'year');
CREATE TABLE pub (
pub_id integer PRIMARY KEY,
pub_date date NOT NULL,
pub_date_prec date_prec NOT NULL
);
然后你可以这样查询表:
SELECT pub_id, date_trunc(pub_date_prec::text, pub_date)::date FROM pub;
忽略pub_date
中的任意“随机”日期和月份值。
答案 1 :(得分:0)
你可以有一个Date字段并有另一个字段 - 让我们说'dateflag'是整数类型。您的使用日期为2,使用日期和月份为2,使用年份为3。这样,在检索数据时,您将知道该怎么做。当然对于选择2和3,您需要在插入时插入除年份之外的虚拟日期/月份。
你对3个领域的想法也是完全有效的 - 但是需要进行大量的检查才能确保你保持日期的神圣性(就像有一天那样 - 那么月份必须在那里,有关天数的规则和几个月等)。