在表上存储计算数据或预先计算的数据(计算的用户年龄或时间戳)

时间:2012-04-20 23:41:02

标签: mysql database database-design relational-database

我有一些表,它们是:

user
==============================
 user_id | username | etc..
==============================

user_metadata
====================================
 user_id | birthday | gender | etc..
====================================

game
========================
 game_id | name | etc..
========================

我想存储喜欢游戏的用户,并且由于年龄属性很重要,我需要在做出类似的时候有所不同,如果有人在5岁时喜欢游戏,那么它应该是不同的实体或者是在8岁。你会推荐哪种表结构?

  1. 在喜欢的时候存储用户的年龄:

    user_likes
    ==========================================
     user_id | game_id | user_age_when_liking
    ==========================================
    
  2. 存储时间戳

    user_likes
    ==========================================
     user_id | game_id | liked_at (timestamp)
    ==========================================
    
  3. 因此,使用选项编号2,如果我需要让所有用户都喜欢某个年龄,我将计算用户birthdate和likes_at之间的年份差异。

    其他建议非常受欢迎。

1 个答案:

答案 0 :(得分:0)

它主要取决于使用列的目的。如果您根本不需要根据时间进行计算(加法,减法等),那么这个人的年龄就完全有效了(基本上你是在预先评估birthDate-likeDate)。但是,如果您有意在10天前说某人喜欢某个游戏,那么将预先评估的用户年龄转回到likeDate以允许另一个calucation将会有更多的工作。请记住,您最有可能希望保持数据库数据的可扩展性,我认为首选使用 likesAt

我还要注意,stackoverflow不是一个旨在回答没有特定代码答案的理论问题的网站,这个问题可能应该在programmers.stackexchange.com上。

相关问题