【发布时间】:2013-08-17 09:09:04
【问题描述】:
目录长度未知,我有很多文章。我想将目录存储在我的 MySQL 中。我不知道我是否应该使用 BLOB,因为那样我将无法通过 SQL 查询来更改它们。
我需要能够将目录转换为数组对象,然后再转换为 Java。
【问题讨论】:
-
您在寻找文章和 TOC 之间的One to Many 关系吗?
目录长度未知,我有很多文章。我想将目录存储在我的 MySQL 中。我不知道我是否应该使用 BLOB,因为那样我将无法通过 SQL 查询来更改它们。
我需要能够将目录转换为数组对象,然后再转换为 Java。
【问题讨论】:
我猜你会想要使用 Text 而不是 blob,因为它会处理文本而不是二进制正确的。 文本字段类似于 Varchar,但具有您需要的所有大小。
【讨论】:
有关对象的序列化和反序列化,请参阅 what-is-object-serialization。然后将序列化的数据字节存储在 SQL 的 BLOB 列中。
【讨论】:
好的,所以您的目录实际上是一个字符串数组。
您的选择是:
创建一个新表,以便每个数组元素都是表中的一行。您可能需要用于外部键的列以及其目录中的每个字符串的索引。这为您在 ToC 及其元素(或文章和 ToC 元素......取决于您选择如何建模它)之间提供了一个适当的 One-to-Many relationship。(借用 @oldCurmudgeon 的评论。)
使用 Java 序列化来序列化 String[] 并使用 BLOB 列类型。
创建(或选择)自定义编码方案,将String[] 转换为文本表示并将其存储在TEXT 列中。
如果您希望能够查询和/或更新单个目录元素,那么第一个方案是可行的方法。
@ppeterka 指出(正确地)您最好阅读Database Normalization 的主题...这是关于设计模式以减少信息重复的主题。在这种情况下,它将帮助您权衡将抽象模型(例如“一对多关系”)转换为数据库模式的替代方法。
【讨论】: