如何避免每个用户的表

时间:2015-01-28 11:26:38

标签: mysql excel design-patterns database-design

我面前有一个相当特殊的用例。将有一个包含大约一千个条目(行)的excel文件,每行代表USER应该判断的内容。

现在,每个人的条目都是一样的。应收集的数据是
a)有多少用户喜欢任何给定的条目
b)任何给定用户喜欢哪些条目

由于部分应用已经投放,我们有用户帐户, 我想为每个包含所述excel信息的用户(!)创建一个表,添加一行来收集投票。我会通过用户列表通过iteratin创建这些表,并创建像“userid_excelentries”这样的表。

我不认为这很优雅。我更喜欢只在表中存储excel信息一次,并且只将用户的投票保存在“user”表中。

该应用程序旨在显示从excel表创建的表(我已经完成了网格)和旁边带有复选框的行。我该如何构建这个?临时表?如何在“用户”表中存储每个用户所选择的信息,因为我不知道将先验选择多少个选项?

我有一个疯狂的想法,即通过javascript实际处理xls对象,将其序列化为哈希并将该哈希存储到每个用户行中的字段中...但我不知道这是否理智:o


我们面临的用户数正好是272 - 这就是为什么我考虑做“每个用户一张桌子”的方法。

1 个答案:

答案 0 :(得分:3)

您可以在数据库中使用3个表

users table
-----------
id
name
...


entries table
-------------
id
name
...


user_entries table
------------------
user_id
entry_id
user_response

要获得某个用户(即Tom)喜欢的所有条目

select e.name
from entries e
join user_entries ue on ue.entry_id = e.id
join users u on ue.user_id = u.id
where u.name = 'tom'
and ue.user_response = 'like'

为了获得每个条目的喜好,你可以做到

select e.name, count(ue.user_id) as likes
from entries e
join user_entries ue on ue.entry_id = e.id
where ue.user_response = 'like'
group by e.id, e.name