我有一个简单的预订场景,用户可以与其他用户预订预定的插槽。我这样做的方式是,我将时间表作为使用Postgres的字符串存储。一个典型的阵列表示[10:00 pm"," 10:30 pm")。但是,由于不同的用户在不同的时区域中,因此我使用客户端来检测时区并在其各自的时区显示插槽。我的问题是,这足以存储时间插槽并将其转换为不同的时区,或者我需要存储精确的时间戳?
我使用Ruby和Rails Framewokr和Postgres db
我使用postgres
将时间段作为字符串存储。
不要。请不要。
如果它们是具体的时间戳(日期 时间),则将其存储为timestamptz
,这样它们是独立的。您可以使用AT TIME ZONE
操作员在当地时间将它们获取或将其转换为客户端。
如果它们只是时间,请使用time
数据类型,并将其存储为UTC时间,使用AT TIME ZONE
操作员适当地转换到当地时间或进行客户端转换。
如果可能的话,将它们存储在归一化的表中。如果您由于某种原因无法执行此操作(说服我)至少使用适当的数据类型的PostgreSQL阵列,而不是一系列字符串 - 或更糟糕的是,看起来您可能正在做,则是Ruby的字符串表示字符串阵列。
这是最近在dba.stackexchange.com上讨论的问题的变体,讨论本机数据库类型或逗号分隔列表是否更好。简短版本:除非您有一个真正的,非常非常好的理由去做,否则它是一种友好的方式。