11

我有一个数据库,我有一个网站前端。我的前端有一个字段,现在是文本,但我希望它支持 markdown。我试图找出正确的方法是存储在我的数据库中,因为我有各种需要支持的视图(PDF 报告、网页、excel 文件等)?

我担心的是,由于其中一些视图不支持 HTML,我不只是想要这个字段的 HTML 版本。

我应该存储 2 个副本(只有一个文本和一个 HTML?),还是应该存储 HTML 并在渲染到 Excel 时尝试删除它们的 HTML 标签?

我需要找出正确的格式(或格式)以存储在数据库中,以便能够同时呈现:

  • HTML,和
  • 常规文本(没有 markdown 或 HTML 语法)

任何建议都将不胜感激,因为我不想走错路。我的意思是我不想在我的 Excel 输出中显示任何 HTML 标记或 markdown 语法。

4

6 回答 6

19

像这样决定:

  1. 存储原始数据(带有降价的文本)。
  2. 即时生成派生数据(HTML 和纯文本)。
  3. 措施性能:
    • 如果它是可以接受的,你就完成了,哇哦!
    • 如果没有,则缓存派生数据。

缓存可以通过多种方式完成……您可以立即生成派生数据,并将其存储在数据库中,或者您可以最初存储 NULL 并延迟生成(何时以及如果需要)。您甚至可以将其缓存在数据库之外。

但无论您做什么,请确保缓存永远不会“陈旧”——即,当原始数据更改时,缓存中的派生数据必须重新生成或至少以某种方式标记为“脏”。一种方法是通过触发器。

于 2013-06-27T17:08:52.417 回答
7

您需要以规范格式存储数据。也就是说,在您的数据库中采用一种真正的格式。听起来这种格式应该是包含降价的文本列。这回答了您问题的数据库设计部分。

然后,根据您需要导出的格式,您应该采用规范格式并将其转换为所需的输出格式。这可能只是输出降价文本,或者通过某种解析器运行它以删除降价或将其转换为 HTML。

于 2013-06-24T06:43:17.157 回答
2

大多数人似乎都在说将数据作为 HTML 存储在数据库中,然后对其进行处理以将其转换为纯文本。在我看来,这样做有一些缺点:

  1. 您可能需要应用程序代码来剥离 HTML 并提取纯文本。想象一下,如果您在 SQL Server 中执行此操作。如果您想编写具有纯文本版本的存储过程/查询怎么办?如何在 SQL 中提取纯文本?有一个函数是可能的,但是工作量很大。

  2. 处理 HTML blob 可能很慢。我想对于小的 HTML blob 来说它会非常快,但肯定比仅仅读取纯文本字段有更多的开销。

  3. HTML 解析器并不总是能很好地工作/它们可能很复杂。这个想法是您的用户可以非常有创意,并且可以插入无法与您的解析器一起使用的 blob。我从经验中知道,从 HTML 中提取纯文本并不总是那么简单。

我会建议大多数电子邮件提供商的做法:

  1. 存储富文本/HTML 版本纯文本版本。数据库中的两个字段。
  2. 与电子邮件提供商的用例一样,用户可能希望这两个字段具有不同的内容。
  3. 您可以编写一个 UI 函数,让用户输入 HTML,然后通过应用程序将其转换为纯文本版本。这为用户提供了一个很好的起点,他们可以在保存到数据库之前对纯文本版本进行按摩/编辑。
于 2013-06-26T16:09:30.117 回答
1
  1. 始终存储源,在您的情况下它是降价。

  2. 还要存储经常使用的格式。

  3. 将按需转换/渲染用于不太常用的格式。

    解释:

  4. 永远有源头。您可能需要它用于各种目的,例如可以编辑相同的输入、审计跟踪、调试等。

  5. 如果经常请求相同的格式,则处理器/内存没有开销,您可以将其与磁盘存储进行交易,这与格式相比便宜。

  6. 偶尔的开销,请参阅#2

于 2013-06-26T23:43:53.907 回答
1

我建议将其存储为 HTML 格式,因为在这种情况下是最丰富的格式,并在获取其他格式(如 PDF、Latex 或其他格式)的数据时删除标签。在以下问题中,您将找到一种轻松删除标签的方法。

删除 HTML 标签的正则表达式

从我的角度来看,将数据(原始和降级)存储在两个单独的字段中是浪费空间,但也是一个完整性问题,因为理论上可以修改其中一个字段而不更改第二个字段。

祝你好运!

于 2013-06-26T15:42:08.680 回答
0

我认为我要做的 - 如果存储不是问题 - 将存储规范版本,但会自动从它生成,在持久化计算字段中,无论其他版本可能需要什么。您希望保留这些字段,因为每次需要数据时都进行转换是没有意义的。并且您希望它们被计算,因为您不希望它们与规范版本不同步。

本质上,这是将数据库用作其他版本的缓存,但缓存可以保证您的数据完整性。

于 2013-07-03T11:41:01.830 回答