Cha*_*van 6 c# database asp.net-mvc database-design sql-server-2012
我有一个这样的组织表:
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
Run Code Online (Sandbox Code Playgroud)
我有一个存储过程来为项目创建动态表.
如果成功创建了任何新组织,那么我们调用存储过程为该组织创建项目表.
每个组织都有自己的项目表.因此项目表名称对于每个组织都是动态的,并且它的名称存储在组织表中.
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
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
我目前正致力于整合搜索功能.用户或匿名用户可以根据以下逻辑搜索数据:
我知道找到组织名称和邀请代码的搜索结果非常简单,因为所有内容都驻留在同一个表中.
但由于动态表名,获取项目的搜索结果(名称或邀请代码)会更复杂.我在如何从动态多表中获取数据中找到了这个链接?,所以我认为这不是一个更好的解决方案,因为搜索需要非常快.
我们之所以基于组织分离项目表是因为在我们的要求中他们明确提到"我们有1000000个组织,但每个组织有超过100万个项目".希望您理解我们不希望在单个表中转储1000000(组织)*1百万= XXXXXX项目的概念.
问题:
工具和技术:
我认为您可以创建组合所有项目表的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')
), '</DELIMITER><DELIMITER>', '
UNION ALL
'), '</DELIMITER>', '')
,'<DELIMITER>', 'CREATE VIEW Organization_Projects
AS
')
Run Code Online (Sandbox Code Playgroud)
对源表的查询效率必须非常接近.
| 归档时间: |
|
| 查看次数: |
667 次 |
| 最近记录: |