2015-04-01 60 views
0

我建立了一个友谊网站,我尝试匹配拥有相似兴趣的用户。SQL问卷数据库设计(EAV模型)问题

  • 我有25个问题,用户必须填写定义的答案(下拉答案)。
  • 我使用实体属性值模型来存储用户ID问题ID用户选择的答案ID。
  • 然后我使用count函数来查看哪些用户与我的配置文件最匹配。

当前的表结构

  1. 问表
  2. 回答表
  3. Question_Answer_User表

问题进出口运行到是我有两个问题,林不知道在哪里最好的地方是存储它们。

  1. 问题是你的国家是什么?
  2. 问题是你的状态是什么?

林不知道我是否应该存储他们的其他25个问题,或者如果我应该将它们存储在三个单独的表中,如下所示。

  1. 国表
  2. 状态表
  3. user_country_state表

有将是很多这些2个问题的答案项。例如,用户可以回答25个国家和用户可以回答的总共900个州/省。

我希望能够将用户位置视为相似度来计算,但我不知道最好的方法是什么?

+0

我会添加一个“重要性”选项来衡量比赛时的问题。如果距离很重要,也许你可以跟踪用户级别的用户位置,而不是一个问题,而是对最大距离有一个疑问。然后使用诸如“Google距离矩阵API”之类的东西来计算距离。当然,如果你走这条路线,你需要使用谷歌地图来显示位置,但也可能有其他服务可以做类似的事情。 – Bob 2015-04-01 01:08:11

回答

1

我认为所选的国家和州应与用户名称和电子邮件地址等其他必要的用户信息一起存在于用户表中。我不认为它属于答案表,但它会在那里工作。

有关用户在设置帐户时从中进行选择的选项列表,将它们存储在预定义的Q和A表中与任何其他位置一样好。我想,这取决于您的数据和功能是如何分解的,这样您就不会跨越界限来存储调查类型的答案以及用户设置的答案。

+0

我有一个用户表,多数民众赞成在即时尝试弄清楚,如果我应该把国家和国家在用户表中作为varchar或如果我应该把它放在问题和答案表。 – 2015-04-03 23:12:51

+0

我喜欢你回答Cindy,但是你认为当我在某些状态下搜索用户时,我可能会对性能产生影响,因为它将搜索varchar变量而不是int数据类型。 – 2015-04-04 00:12:22

+1

我假设你会将它们存储为身份密钥,而不是作为变种。但是,这正在进入一个全新的性能与易于编程的问题。如果你的数据库不是太大,你可以将它们作为var chars存储起来,但我总是更喜欢用数字键来做这种事情。你是否将所有常规答案存储为完整值或作为其关键值? – CindyH 2015-04-04 00:17:24