我想创建一个表格,以反映用户对我的应用程序中其他用户的操作。
我想到了两个解决方案,我想知道什么会更快?
1)
ID | source_user_id | target_user_id | action_type
在此选项中,我将为每个操作创建一行
2)
Id | source_user_id | target_user_id | action_x | action_y | action_z
在此选项中,我将为其他用户可用的所有操作创建一行, 如果未执行操作,则字段将设置为NULL值 仅当至少执行了一个操作时才会创建此行
你能帮我理解为什么最好的选择
对不起我的英语不好。答案 0 :(得分:1)
绝对不是第二名。我会选择修改后的第一名:
ID | source_user_id | target_user_id | **action_id**
然后制作一张表actions
ID | action_type | action_info | etc
这将允许您进行多个不同的操作,并且更加灵活。你说,“我将为其他用户提供的所有操作创建一行”......但是,根据您的布局,您真正想要的是为用户之间的每个操作创建另一个列 。这是处理这个问题的一种非常糟糕的方式。
答案 1 :(得分:1)
什么会更快?
为了获得特定用户的所有操作,第二个解决方案应该更快,尽管这可能只是少量。
为了添加新动作,第一个解决方案要快得多。第二种解决方案需要重新组织表格。
接下来,您没有说明您要为第二种情况添加到列中的内容。如果你输入长度为2,000个字符的字符串,那么第一种情况可能要快得多,尤其是hellohellosharp建议使用id而不是值。较短的记录和减少的I / O应该弥补必须将大表连接到一个小的参考表。
因为您没有提供足够的信息来实际回答有关性能的问题,所以最好的答案是专注于数据库设计。为此,操作表应该具有自动递增ID,两个用户ID,操作ID以及发生时间的日期/时间字段。使用适当的索引,获取有关特定用户或用户/操作的信息应该具有足够好的应用程序性能。
答案 2 :(得分:0)
在定义表格结构之前,您首先要确定哪些预期查询对性能至关重要? 是否为{{1}获取所有可用action
s }和source
?或者获取系统中当前可用的target user
个?表格的构建方式可能会有很大的不同。
在此之后,您可以使用许多技术来构建针对您的需求进行优化的表格,例如: