我有一个项目,我需要有多个人员列表。一个列表可能包括名字,姓氏,电子邮件地址,而另一个列表将存储姓氏,电子邮件,生日,公司,帐号等。在其他工作中,每个列表具有不同的结构。允许该项目的用户为列表中的人创建无限数量的列表和最多100个属性。
此外,用户可以查询仅根据属性值返回列表中一部分人的筛选列表。每个属性都可以是文本,数字或日期。
在我的旧系统中,我有两张桌子。
在ListPeople表中,我将有100列:
问题在于,当他们构建查询来过滤数据时,每个查询都会被强制进行表扫描,因为我没有为每一列编制索引。
处理此问题的最佳方法是什么?我应该保留我的架构并向所有列添加索引(对此表进行大量插入/更新)还是以不同的方式进行设计?也许使用EAV(希望不是)?另一个想法(因为这将在Azure中)是具有List表和ListPeople表,但是也使用DocumentDB No-SQL数据库来存储人的属性。我不确定这是否是最佳方法。