1

我正在开发一个允许用户通过facebookor注册的应用程序,twitter我希望能够使用来自这些网站的个人数据,并想知道我应该如何存储它。到目前为止,这是我想出的:

在此处输入图像描述

user表将存储无论用户如何注册都应该存在的信息,例如first_name.

user_property表将用作key-value缓存并存储特定于facebooktwitter(由origin字段表示)的信息。我将存储可单独用作API调用或SQL查询的一部分的属性,例如 users' facebook id,我将存储API以格式序列化的其他调用的结果JSON,例如 users' facebook friends

那样:

  • 我在表格中有共同的信息,user通过一个单一的信息,SELECT我可以获得一些关于用户的基本有用信息
  • 我有一些额外的属性来自facebook/twitter(例如用户 ID)单独存储,我仍然可以使用JOINbetweenuser和查找user_property
  • 我可以检索过于昂贵而无法标准化存储的信息(例如,创建一个表来存储人们的朋友并且每个朋友有一个表条目)仍然具有JOINbetween userand user_property

这就是我现在想知道的:

Q1:这可能是一个有点可持续的数据库设计,还是我弄错了会遇到一些问题,如果是这样,哪些问题?

Q2:当存储经常变化的信息(例如朋友/关注者列表)时,您如何保持信息最新(您首先将信息存储在数据库中吗?如果是,那么标准/触发器是什么?您是否使用来决定何时再次提取信息)?

4

1 回答 1

1

您的设计具有 EAV 模式(实体-属性-值)的大多数(坏)属性。在这件事上寻求维基百科,也看看这个网站。

EAV 最不可持续的设计决策是(恕我直言),一开始这似乎可以很好地扩展。但是,一旦您的数据增长,您就会高速撞上混凝土墙。这是因为为了加载一个用户的数据,数据库必须使用随机访问来接触物理表的很大一部分。当数据增长和经常变化时,调整数据库以将一个用户的行保持在相邻页面中是一项繁重的任务。user_property

于 2012-11-04T23:35:40.203 回答