这是一个完全假设的问题:假设我有一个数据库,我需要在其中存储用户的会员资格,该会员资格可以持续特定的时间(1 个月、3 个月、6 个月、1 年等)。
拥有一个包含字段的表是否更好Memberships
(每个日期都存储为 unix 时间戳):
user_id INT
, start_date INT
,end_date INT
或将其存储为:
user_id INT
, start_date INT
,length INT
无论哪种方式,您都可以查询具有活动成员资格的用户(例如)。对于后一种情况,每次运行查询时都需要执行算术运算,而前一种情况只需要计算一次结束日期(插入时)。从这个角度来看,以前的设计似乎更好——但它有什么缺点吗?是否有任何常见问题可以通过存储长度来避免,而不能通过存储日期来避免?
此外,在存储时间/日期数据时,unix 时间戳是要走的路吗,还是喜欢 DATETIME 之类的东西?我遇到了两种数据类型(过度转换)的问题,但通常选择 unix 时间戳。如果喜欢 DATETIME 之类的东西,这将如何改变我之前的设计问题的答案?