我见过一些关于这个问题的问题(例如here和here),但我只想澄清另一种方法
我们有自动取款机
产品
现在我们需要添加对少数语言的支持(这是一种SaaS解决方案,给定的客户可能有两种语言-- max 3-4 )。每个SaaS租户都有自己的数据库)
在所有其他建议的解决方案中,它涉及修改模式(以某种方式)。更糟糕的是,搜索变得更加复杂。相反,我想的是将所有可翻译的值存储在同一列中(在本例中为: Name)。因此,具有两种语言内容的典型行如下所示
Id _名称
11 en :香蕉∆ es: Plátano ∆ zh :香蕉
∆ -是一个示例拆分器(这将是一个正确的特殊字符,不会与用户输入冲突)。
这样,搜索就简化得多了,而且我对模式所做的更改也非常少。其他一切(基于选定用户区域设置的更新/检索可以通过代码(C#)进行管理)
所以我的问题是,这是否一个可以接受的方法?如果没有,你在这里面看到了什么问题?
发布于 2015-12-09 23:58:17
这种方法的主要问题是,为了按名称搜索产品,您必须使用LIKE '%(productName)%'
进行全表扫描。全表扫描提供极差的性能。这不仅表现不好,这是拒绝服务攻击的基础。
通过使用全文索引,您可以获得比糟糕透顶的性能更好的结果。我对全文索引没有足够的经验来对这些索引提出建议,但据我所知,由于同一列中有不同的语言,所以您很可能会遇到排序规则的麻烦。
https://stackoverflow.com/questions/34191255
复制相似问题