我正在开发一个允许用户通过facebook
或twitter
注册的应用程序,我希望能够使用这些网站上的个人数据并想知道我应该如何存储它。这是我到目前为止所提出的:
user
表将存储应该存在的信息,无论用户如何注册,例如first_name
。
user_property
表可用作key-value
缓存,并存储特定于facebook
或twitter
的信息(由origin
字段表示)。我会存储可以单独用作API
个调用或SQL
个查询的属性的属性,例如用户facebook id
,我会存储序列化的其他API
个调用的结果JSON
格式,例如用户facebook friends
。
那样:
user
表格中有共同信息,只有一个SELECT
我可以获得有关用户的基本有用信息facebook/twitter
的附加属性(例如用户ID),我仍然可以在JOIN
和user
之间使用user_property
查找。JOIN
和{{1}之间仍然有user
}。这就是我现在想知道的事情:
Q1:这可能是一个有点可持续的数据库设计还是我弄错了并且遇到了一些问题,如果是的话,哪些问题呢?
Q2:存储频繁更改的信息(例如朋友/关注者列表)时,如何保持信息的最新状态(首先将信息存储在数据库中?如果是,您使用什么标准/触发器来决定何时再次提取信息?
答案 0 :(得分:1)
您的设计具有EAV架构(实体 - 属性 - 值)的大多数(不良)属性。在这个问题上寻找Wikipedia并环顾这个网站。
使用EAV的最不可持续的设计决策是(恕我直言),一开始这似乎可以很好地扩展。但是一旦你的数据增长,你就会高速撞到混凝土墙。这是因为为了加载一个用户的数据,DB必须使用随机访问触摸物理表的巨大部分。当数据增长并经常更改时,调整数据库以将一个用户的user_property
行保持在相邻页面中是一项繁重的任务。