我们应该存储Text& HTML字符串的标记分为1个相同的列或2个单独的列?

时间:2013-05-01 18:50:44

标签: database database-optimization

我想将以下HTML字符串存储到DB <b>This</b> is <i>my text</i>中。这个Html字符串有两部分:

  • 文字:“这是我的文字”
  • 标签:<b></b><i></i>

在我看来,有两个选项来存储上面的Html字符串。

  • 选项1:存储文字&amp;标签分为1个相同的列,因此TextTag列将具有<b>This</b> is <i>my text</i>

  • 选项2:存储文字&amp;标签分为2个单独的列,因此文本列将显示“这是我的文字”&amp;标记列将包含<b>x</b> x <i>x x</i>

有什么优点和优点?选项1&amp;的缺点2。

我认为,选项1很容易编码,但是当我们执行搜索功能时会很难,因为我们不需要搜索Tag部分,因此我们必须在搜索中使用某种Regex,这可能会减慢查询速度。

另一方面,选项2更难编码,因为我们必须将标记列映射到文本列,但是由于我们不必在搜索中使用正则表达式,因此很容易进行搜索。此外,选项2比选项1花费更多的流量,因为在查询中有一些额外的“x”。但我相信选项2比1更安全,因为我们只在主要字段中存储文本而非html,因此它可能更安全。

如果您是数据库专家,那么您的决定是什么?

2 个答案:

答案 0 :(得分:1)

虽然我们不是数据库专家,但我们认为 1 GT;您应该使用任何html提取库从内容中提取主文本。 2 - ;将提取的内容存储在您要搜索的主字段中。 3 GT;使用HTML标签存储整个值,即

第二个字段中的

<b>This</b> is <i>my text</i>。因为如果你必须渲染HTML后者,那么你将不会有任何额外的编程负担。您可以通过搜索在主字段中查找,然后按原样返回所需的html段。

由于

答案 1 :(得分:0)

我认为最好的选择是您OPTION-2的修改版本,其中在第1列中存储数据的文本部分,在第2列中存储您在BINARY FORMAT中使用的STRING,其中1或Y或X = TRUE,0或N或O = FALSE,这样您可以存储的内容远远超过BOLD或ITALICS需要应用的范围。

例如,如果您的第二列长度为10个字节,则可以存储十个不同项目的格式选项,例如粗体,斜体,下划线,水平(左,右,中)垂直(顶部中间底部)或任何其他您可以量化为一个字符或一个字节。

进一步说明请参见下图。

enter image description here