【问题标题】:How do I Store the table of contents of articles in MySQL? (not the article itself)如何在 MySQL 中存储文章目录? (不是文章本身)
【发布时间】:2013-08-17 09:09:04
【问题描述】:

目录长度未知,我有很多文章。我想将目录存储在我的 MySQL 中。我不知道我是否应该使用 BLOB,因为那样我将无法通过 SQL 查询来更改它们。

我需要能够将目录转换为数组对象,然后再转换为 Java。

【问题讨论】:

  • 您在寻找文章和 TOC 之间的One to Many 关系吗?

标签: java mysql sql jdbc


【解决方案1】:

我猜你会想要使用 Text 而不是 blob,因为它会处理文本而不是二进制正确的。 文本字段类似于 Varchar,但具有您需要的所有大小。

http://dev.mysql.com/doc/refman/5.0/en/blob.html

【讨论】:

  • 我认为 TEXT 类型已被弃用。
  • 我知道,但这是文章的目录,而不是文章本身。
  • @JunedAhsan 真的吗?我用谷歌搜索了一下,没有发现
  • 你问错了,不是文章本身,而是文章目录!我正在存储目录。我什至不能对这个分析器投反对票,该死!
  • 正如 user2310289 所说,使用 TEXT 列 BLOB 用于二进制数据。
【解决方案2】:

有关对象的序列化和反序列化,请参阅 what-is-object-serialization。然后将序列化的数据字节存储在 SQL 的 BLOB 列中。

【讨论】:

  • 是的......但是将序列化的对象放入数据库通常是个坏主意。
【解决方案3】:

好的,所以您的目录实际上是一个字符串数组。

您的选择是:

  • 创建一个新表,以便每个数组元素都是表中的一行。您可能需要用于外部键的列以及其目录中的每个字符串的索引。这为您在 ToC 及其元素(或文章和 ToC 元素......取决于您选择如何建模它)之间提供了一个适当的 One-to-Many relationship。(借用 @oldCurmudgeon 的评论。)

  • 使用 Java 序列化来序列化 String[] 并使用 BLOB 列类型。

  • 创建(或选择)自定义编码方案,将String[] 转换为文本表示并将其存储在TEXT 列中。

如果您希望能够查询和/或更新单个目录元素,那么第一个方案是可行的方法。


@ppeterka 指出(正确地)您最好阅读Database Normalization 的主题...这是关于设计模式以减少信息重复的主题。在这种情况下,它将帮助您权衡将抽象模型(例如“一对多关系”)转换为数据库模式的替代方法。

【讨论】:

  • 对于第一个选项,是否意味着每个数组都需要一个表?
  • 没有。您需要一个表来表示所有 ToC 数组,并使用其他列来确定每行属于哪个 ToC。这是正常的 SQL 数据库内容...
  • 添加一个简短的 database normalization 概念也是明智之举,因为它可能对 OP 以及任何长期找到此页面的人有用。
  • @ppeterka - 嗯,也许吧。但我不认为这个问题特别容易搜索。
  • @StephenC 我多次对人们搜索 intartubez 的内容和方式感到惊讶——谁知道呢? :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-23
  • 1970-01-01
  • 1970-01-01
  • 2010-11-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多