【发布时间】:2014-02-11 05:06:37
【问题描述】:
我正在建立一个视频数据库。
你知道的一个视频有很多标签。每个标签也与很多视频相关。
正常的解决方案是在每个标签和视频之间创建一个中间表记录关系。
刚刚,令我惊讶的是,我了解到mysql可以查询xml!所以我想我可以将视频的所有标签保存到视频表的一列中。
但我想知道这样是否更有效。
【问题讨论】:
标签: mysql sql xml many-to-many relationship
我正在建立一个视频数据库。
你知道的一个视频有很多标签。每个标签也与很多视频相关。
正常的解决方案是在每个标签和视频之间创建一个中间表记录关系。
刚刚,令我惊讶的是,我了解到mysql可以查询xml!所以我想我可以将视频的所有标签保存到视频表的一列中。
但我想知道这样是否更有效。
【问题讨论】:
标签: mysql sql xml many-to-many relationship
XML 非常适合存储非结构化和结构化数据。 MySQL 非常适合存储结构化数据。这些数据是非结构化的吗?听起来对我来说这是一个简单的多对多关系。 XML 也可能成为性能杀手,请参阅Performance of MySql Xml functions?
这是一个设计决定,没有硬性规定。我建议您测试这两种方法并做出明智的选择。然而,我发现 MySQL 在加入多对多关系时的性能要比解析 XML 好得多。
上次我检查您也无法索引 XML。哦,然后你必须记住一件事。膨胀... XML 文档会使数据库膨胀。例如,在关系设计中,您将标签 Kung Fu 存储一次,然后将该标签与正确的电影相关联。在 XML 方法中,您可能会存储 <tag>Kung Fu</tag> 数千次。
在您的设计中,您希望将所有 xml 添加到一列?这将是一个巨大的 XML 文档,并且在某些时候会严重影响性能,我愿意打赌。我在回家的路上思考了一下,其中一个严重的后果是,如果你将所有标签都塞进一个 XML 列中,那么更新和读取的争用也将是巨大的。如果为每部电影存储一个带有标签的 XML 列,您将获得更好的性能。包含所有 XML 的列会像地牢守卫抱着公主一样被锁定。
就像我说的那样,每个人都有其缺点和优点。测试它们并学习新技能。
【讨论】: