这不是一个问题,但我只是在寻找关于此问题的意见。
我正在和公司做第一份工作。他们让我优化他们的mysql db全文搜索。
现在,只要看到数据库结构,我就改变了面部表情。
它是一个汽车零件数据库,它们有1个表和3列:ID,part_number,xml。
我只是愚蠢不明白这一点,还是他们放置ALL,我在ENORMOUS xml文本中说出有关每种不同产品的所有信息?我只是不明白,并希望澄清。他们是否可以在每个不同的栏目中放置有关该产品的每种不同信息(例如:颜色,尺寸,制造商等)?或者使用基于对象的无关DB(如Mongo)?使用它来启用对XML文本的“全文”搜索以返回相关项目是“正常”做法吗?
请赐教,无论是我真的很蠢还是没有得到它,或者说DB是完全没有意义的。
提前致谢。
答案 0 :(得分:0)
嗯,你描述的方式真的看起来有点愚蠢。在不了解数据结构的情况下很难说出修改数据结构的事情,但我认为任何事情都比全文搜索更好。
答案 1 :(得分:0)
他们得到的问题是,不同部分的属性数量是一个永无止境的列表,其中一些是很多部分常见的,有些则不是。如果你试图为每个属性设置一个列,那么你最终会得到数千个列 - 在一些RDBMS中有一些技术可以解决这个问题 - 稀疏列/表。
另一种方法是将属性规范化到属性表中,在该属性表中存储part_id,attribute,value - 这将成为一个非常大的键值表,并且会在基数中快速增长 - 并且可能这些值中的一些是不同的类型,可能会很大。它们也会重复,所以你可以再次标准化,然后意识到你已经陷入痛苦的表现和可怕的场景,你有不同类型的多个值字段或必须存储变体数据类型的兔子洞。
最后一种选择是FTS一个字段/存储XML - 这是你找到的人选择的。
有人做出了选择,也许是第一次你可以在RDBMS中看到它,但可能不是最后一个 - 当你在关系存储中时 - 考虑你对原作者的不同做法(在限制范围内)一个RDBMS)。
存储具有不同属性的项目的属性信息总是一个令人讨厌的问题 - 我已经看到了过去人们采用的所有三个选项。