【问题标题】:MySQL | Database schema for user posts containing images and files [closed]MySQL |包含图像和文件的用户帖子的数据库架构[关闭]
【发布时间】:2022-01-12 12:08:57
【问题描述】:

在我的应用中,用户可以发布可能包含文本、标题、图像等的帖子。

将这些存储在数据库中的正确方法是什么?我可以想到两种可能的方法:

第一种方法

posts表中为一个帖子存储多行数据,如下所示:

post_data_id post_id data_type data
1 1 1 Sample Text
2 1 2 (Image Link)
3 1 1 Another Text
4 1 3 (Audio Link)

其中data_typedatatypes 表的外键,其中1 是示例文本,2 是图像链接,3 是音频文件的链接。

这样,为了检索单个帖子,我只会SELECT 属于特定post_id 的所有行。

第二种方法

以某种方式将帖子数据编码为如下的 HTML 之类的语言,并将其保存到 posts 表中的单行中:

<Text>Sample Text</Text><Image>Image Link</Image><Text>Another Text</Text><Audio>Audio Link</Audio>

通过这种方式,用户必须不能发布包含这些特定标签的文本,这正是让我质疑这种方法的原因。在将文本发送到数据库之前仅检查文本是否包含标签是否足够安全?

【问题讨论】:

标签: mysql sql database database-design


【解决方案1】:

查看 WordPress 的管理方式;上传被移动到上传目录(通常具有日期文件夹结构 - 示例:/wp-content/uploads/2022/01)。然后通过数据库中的此路径引用上传。

wp_posts 表用于跟踪这些“附件”(甚至存储附件 mime 类型以帮助处理附件文件类型)。这些条目与meta_id 一起存储(wp_posts 表中的所有条目也是如此)以与wp_postmeta 表中更详细的元数据链接。

我建议通读https://www.wpbeginner.com/beginners-guide/where-does-wordpress-store-images-on-your-site/ 以详细了解此结构,因为该结构已由 WordPress 试用和测试。

【讨论】:

  • 它如何知道将这些附件/元数据放在哪里?它是否根据 meta_id 将它们按顺序排列?
  • WordPress 在数据库设计方面并不完全是一个角色模型,无论实体如何,都会压缩元表中的所有内容......(是的,是的,我知道,它很灵活,但如果你不这样做'不需要这种灵活性,不要像他们那样做。)
  • @stickybit - 我同意,但它有助于理解广泛可用的结构。它并不完美,但在管理网站的各个方面都很好地平衡了简单性。
  • @samson4649:我对推荐初学者建立他们对错误示例的理解持怀疑态度(除非它明确标记为“这不是如何做”) ...
  • Wordpress 是低效的“实体-属性-值”模式模式的一个流行示例。此外,它的 wp_postmeta 表没有被充分索引。即便如此,这也是如何实现问题中描述的小型数据集的一个合理示例。
猜你喜欢
  • 2021-12-08
  • 1970-01-01
  • 2019-07-08
  • 2019-03-25
  • 1970-01-01
  • 2013-10-24
  • 1970-01-01
  • 2014-05-08
  • 2016-07-05
相关资源
最近更新 更多