如果 2 个不同的表共享相同的点赞/投票表
Posted
技术标签:
【中文标题】如果 2 个不同的表共享相同的点赞/投票表【英文标题】:Should 2 different tables share the same like/vote table 【发布时间】:2019-02-13 13:25:21 【问题描述】:我有点怀疑何时应该提供共享的“喜欢”表或将其拆分为两个不同的表。
该应用程序将以类似“墙”的方式显示视频/图像,就像 Facebook 和许多其他平台一样。
如果用户已经喜欢过某张图片或视频,那么“喜欢”按钮将被着色以表明该内容已被点过。
视频表
id title desc url src
------------------------------------
1 soms thing wwww .png
图像表
id title desc src
------------------------------
1 soms thing .jpg
选项1两张表
投票表视频
id video_fk user_fk voted
-----------------------------------------
1 1 1 2
投票表图片
id image_fk user_fk voted
-----------------------------------------
1 1 1 2
选项 2 1 表
投票表共享(type_fk 标识它是哪种类型,1 表示图像 2 表示视频)
id content_fk user_fk type_fk voted
-------------------------------------------------
1 1 1 2 2
2 个表的问题是,当我必须查找用户是否喜欢该内容时(当滚动墙壁并获得许多结果时)我将不得不将结果存储在具有 id 和标识符的多维数组中决定它是哪种内容类型(图像或视频)。
你会是更好的方法,还是第三种方法?
【问题讨论】:
我已经给你答案了,但我会在这里详细说明。如果您选择我的方法,这意味着将两个表都减少到content
和 votes
,您可以将内容类型存储在 content
表中,从而将其从 votes
中删除,因为它是一个相当反模式,因为您正在存储关于用于保存投票信息的表格中的内容。
不管你走哪条路,去掉id
,因为有一个“自然的”PRIMARY KEY
,它是2或3列的“复合”。
【参考方案1】:
您应该尽可能少地保留表格,因为这样可以减少请求的数量和代码的复杂性。
我什至会将视频和图像放在同一个名为“内容”的表中,看看您的所有列几乎都是一样的。
【讨论】:
我想过,但你看,内容类型不止 2 种,还有文章 + 类似 5 种以上,这些表格非常简化 :) 但是你会建议 1 个表格来表示喜欢,这也是我认为更好的解决方案,它确实简化了很多 @iiiml0sto1 如果您有类似articles
、images
、videos
或music
之类的内容。我会将它们分为几类:images
、videos
和 music
是 media
,因为实际上您需要的唯一列是 id
、title
、desc
、type (enum)
,url (but renamed to src)
,如果您知道如何使用 MIME 类型检测,则存储文件扩展名已过时。对于其他类型的内容,我会保留适当的表格,除非它们也可以分类。
给了一些思考,感谢您的帮助
我也打算对此添加评论 - 您只有两种类型的内容,但将来可能会扩展,您不想继续添加新表格。我肯定会使用包含对内容类型的引用的单个内容表。
如果您必须使用 content_fk
重新访问视频,代码会变得混乱。以上是关于如果 2 个不同的表共享相同的点赞/投票表的主要内容,如果未能解决你的问题,请参考以下文章
在时间戳略有不同的2个不同数据库中的表之间连接(MySQL)