Mysql 用户活动提要的表结构-关系型还是非关系型?
因此,我决定: 我决定是否为用户活动提要执行类似操作:Mysql 用户活动提要的表结构-关系型还是非关系型?,mysql,database,database-design,android-activity,Mysql,Database,Database Design,Android Activity,因此,我决定: 我决定是否为用户活动提要执行类似操作: id | userID | typeID | contentID | time 或与外键和适当索引更相关的内容,如: id | userID | postID | postCommentID | photoID | photoCommentID | time 或者沿着这些路线 我在寻找一个答案,不仅要说明哪一个,还要说明原因和优点/缺点 编辑: 这适用于的另一件事是,使用1个带有type | contentID或postID | ph
id | userID | typeID | contentID | time
或与外键和适当索引更相关的内容,如:
id | userID | postID | postCommentID | photoID | photoCommentID | time
或者沿着这些路线
我在寻找一个答案,不仅要说明哪一个,还要说明原因和优点/缺点
编辑: 这适用于的另一件事是,使用1个带有
type | contentID
或postID | photoID
的注释表更好还是使用2个单独的表更好;一个用于照片评论,一个用于帖子评论
编辑2:
如何使用数据:
它可以在两种场景中使用-用于为用户自己或周围的其他用户显示时间线提要
编辑3:
尽管所有详细信息都存储在其他表中,但选择此方法创建活动提要的原因是为了提高加载提要的速度,尽管我知道我牺牲了写入性能。它还允许我以后添加新的数据/帖子类型,并将查询中的连接数减少到0
谢谢你的时间
-Stefan当你说feed时,你的意思是为了别人的消费?或者储存其他人的提要?或者只是一个人在你的系统中的活动
我会先进行规范化,然后再根据需要进行非规范化,但您的两个选项都不会显示您正在建模的范围的完整情况。它可用于两种场景-在时间线提要中为用户自己或周围的其他用户显示。对不起,太累了,工作时间太长了!“规范化”是指使用外键和索引的适当结构?@Stefan我会设计规范化的存储。这意味着写入期间的影响(锁定)最小。这意味着写得更快。索引的选择将取决于性能。我更擅长SQL Server,但MySQL与之非常相似(),因此当您有覆盖索引时,数据永远不需要从数据行中读取。@Stefan您在MySQL中没有选择物化视图或索引视图,这将是一种读取优化。您可以查看定期或通过触发器更新的只读非规范化数据。同样,我将首先规范化(主键、外键约束是其中的一部分)并添加索引(优化的一部分,尽管某些索引可能被特定引擎用于强制约束)一旦你看到实际的读取模式,就有可能去规范化。@Stefan我还想补充一点,当连接被索引覆盖时,它们并不昂贵。它们当然不会像必须在非规范化模型中写入许多不同的位置以及可能存在不一致数据那样昂贵。查看执行计划将告诉您更多关于阅读过程中常见查询的行为。非常感谢您冗长的回答。我要睡一觉,看看我的一个朋友会说些什么,因为这只是表面现象。我想如果我在活动类型的所有不同列上添加外键到它们相应的父表中,这将是非常“规范化”的,不是吗?它只允许我用这个用户ID查询活动提要中的最后10篇帖子。。。我要去睡觉了,我的大脑停止工作了!再次感谢!如果需要高性能的活动流,可以考虑查看外部API。免责声明-我是作者。