我已经看到围绕此问题的几个问题(例如here和here),但只是想澄清一种替代方法
我们有什么ATM
产品
现在我们需要添加对少数语言的支持(这是一个SaaS解决方案,给定的客户可能有几种语言最多3-4个。每个SaaS租户都有自己的数据库)
在所有其他提出的解决方案中,它涉及修改模式(以某种方式或另一种方式)。更糟糕的是,搜索变得更加复杂。相反,我在想的是将所有可翻译的值存储在同一列中(在本例中为:Name)。因此,具有两种语言内容的典型行将如下所示
Id |名称
11 | EN:香蕉Δ es:PlátanoΔ zh:香蕉
Δ - 是一个示例分割器(这将是一个特殊的特殊字符,不会与用户输入冲突)
这样,搜索更加简化,我对模式所做的更改量也很少。其他所有内容(基于所选用户区域设置的更新/检索可以通过代码(C#)进行管理)
所以我的问题是,这是一种可接受的方法吗?如果没有,你在这看到了什么问题?
答案 0 :(得分:1)
这种方法的主要问题是,为了按名称搜索产品,您将不得不使用import asdf = require("");
进行全表扫描。全表扫描表现极差。这不仅仅表现不佳,这就是拒绝服务攻击的内容。
通过使用全文索引,您可能会比糟糕的糟糕表现更好。我没有足够的全文索引经验,以便为这些建议提供建议,但我有根据的猜测是,你可能会因整理问题而遇到麻烦,因为你在同一列上有不同的语言。