假设我为用户提供了检查她说的语言并将其存储在数据库中的功能。重要的旁注,我将不会在db中搜索这些值中的任何一个,因为我将使用一些单独的搜索引擎进行搜索。现在,存储这些值的明显方法是创建一个像
UserLanguages ( UserID nvarchar(50), LookupLanguageID int )
但是该站点将承受很高的负载,因此我们正在尝试消除所有开销,因此,为了避免在UI上显示结果时与主成员表联接,我考虑在主表中存储用户的语言,逗号分隔,例如“ 12,34,65”
同样,我不搜索它们,因此我不必担心必须在该列上进行全文索引。
我确实看不到此解决方案有任何问题,但是我是否忽略了任何内容?
谢谢,安德烈
您可能现在没有丢失任何内容,但是当您对需求进行更改时,您可能会后悔该决定。您应该像第一个本能一样将其标准化存储。那是正确的方法。
您的建议是经典的过早优化。您尚不知道该联接是否会成为瓶颈,因此您也不知道您是否实际上在购买任何性能改进。等到您可以对事物进行概要分析,然后您将知道是否需要优化该事物。
如果是这样,我会考虑使用物化视图或其他一些方法,这些方法使用规范化的数据预先计算答案到不视为记录簿的缓存中。
更一般而言,如有必要,可以进行很多可能的优化,而不会以建议的方式损害您的设计。