我有一个这样的组织表:
OrgID | OrgInviteCode | OrgName | Status | ProjectTableName | InsertOn ------------------------------------------------------------------------------------------- 1 | RC12T67 | Organization1 | Active | Project1 | 2015-12-19 15:37:43.333 2 | BC56uI7 | Organization2 | Active | Project2 | 2015-12-19 15:37:43.333 3 | ORG1456 | Organization3 | Active | Project3 | 2015-12-19 15:37:43.333 4 | ORG2856 | Organization4 | Active | Project4 | 2015-12-19 15:37:43.333
我有一个存储过程来为项目创建动态表.
如果成功创建了任何新组织,那么我们调用存储过程为该组织创建项目表.
每个组织都有自己的项目表.因此项目表名称对于每个组织都是动态的,并且它的名称存储在组织表中.
Organization1 - >项目表
ProjectID | OrgID | ProjectName | ProjectInvideCode | Address1 | Address2 | City |State | ZIP | Country ------------------------------------------------------------------------------------------------------------------------------- 1 | 1 | Org1Proj1 | XJ34590 | 235 Harrison St. | | Syracuse | AK | 23456234 | US 2 | 1 | Org1Proj2 | JKI8907 | 35 Sterling St. | | Syracuse | NY | 23456456 | US
Organization2 - >项目表
ProjectID | OrgID | ProjectName | ProjectInvideCode | Address1 | Address2 | City |State | ZIP | Country ------------------------------------------------------------------------------------------------------------------------------- 1 | 2 | Org2Proj1 | RUIO90 | 90 Ram St. | | Los Angeles | CA | 23456234 | US 2 | 2 | Org2Proj2 | KLOP907 | 35 Wide St.| | Chicago | IL | 23456456 | US
我目前正致力于整合搜索功能.用户或匿名用户可以根据以下逻辑搜索数据:
使用组织名称或组织邀请代码进行搜索.
使用项目名称或项目邀请代码进行搜索.
搜索项目地址,城市,州,国家
我知道找到组织名称和邀请代码的搜索结果非常简单,因为所有内容都驻留在同一个表中.
但由于动态表名,获取项目的搜索结果(名称或邀请代码)会更复杂.我在如何从动态多表中获取数据中找到了这个链接?,所以我认为这不是一个更好的解决方案,因为搜索需要非常快.
我们之所以基于组织分离项目表是因为在我们的要求中他们明确提到"我们有1000000个组织,但每个组织有超过100万个项目".希望您理解我们不希望在单个表中转储1000000(组织)*1百万= XXXXXX项目的概念.
问题:
我们如何以有效的方式搜索项目数据?
我们的项目单独表概念是否最差?你有什么建议可以处理得更好吗?
在C#中有没有有效的方法?
工具和技术:
Asp.Net 4.5,C#
MVC 5
首先是实体框架代码
SQL Server 2012
Alex Yu.. 5
我认为您可以创建组合所有项目表的VIEW
SELECT REPLACE( REPLACE( REPLACE( ( SELECT DISTINCT 'SELECT * FROM Organization O JOIN ' + ProjectTableName + ' PT ON O.OrgId = PT.OrgId WHERE O.OrgId = ' + convert(varchar(10), OrgId) as [text()] FROM Organization FOR XML PATH ('DELIMITER') ), '', ' UNION ALL '), ' ', '') ,'', 'CREATE VIEW Organization_Projects AS ')
对源表的查询效率必须非常接近.
我认为您可以创建组合所有项目表的VIEW
SELECT REPLACE( REPLACE( REPLACE( ( SELECT DISTINCT 'SELECT * FROM Organization O JOIN ' + ProjectTableName + ' PT ON O.OrgId = PT.OrgId WHERE O.OrgId = ' + convert(varchar(10), OrgId) as [text()] FROM Organization FOR XML PATH ('DELIMITER') ), '', ' UNION ALL '), ' ', '') ,'', 'CREATE VIEW Organization_Projects AS ')
对源表的查询效率必须非常接近.