2010-02-10 42 views
1

这是一个经典问题,我似乎无法想出解决方案,我很满意。什么会被认为是面向这个问题的OO优雅和DB可扩展的方法?一对多组合和数据检索

Employee 
- Name, Phone, Meta, etc 

Company 
- Meta, etc 
- Employee[] 

CompanyRepository (RDMBS) 
- Company GetById(int) 
- Company[] GetAll() 

方法1: 'GetById' 选择所有从 'tCompany' 和左加入 'tEmployee'。 Sql Select产生12行。返回一个拥有12名员工的公司。

'GetAll'Same如上选择,但返回12,000,000行。通过创意循环和逻辑回报每个有12名员工的1,000,000家公司。

方法2: 'GetById' ......同上

'GETALL'。从'tCompany'中选择所有,但'tEmployee'中没有任何内容。 Sql select产生1,000,000行。返回1,000,000个公司,但每个公司都有一个空的'员工'属性。

方法3 ...分裂域划分为“SimpleCompany”只包含元以及从“SimpleCompany”继承,但有一个“员工”财产“ComplexCompany”。 GetById返回'ComplexCompany',GetAll返回'SimpleCompany'数组。

......由于不同的原因,每个人都闻起来不好。

回答

0

什么是商业理由让所有公司(12,000,000行)?我不建议你一次在内存中拥有所有12,000,000行。

可能你应该使用分页。一次选择一组有限的公司,然后从一个页面迭代到另一个页面,直到没有行返回。

public Company[] GetAllByPageNumber(int pageNumber, int pageSize) 

不利的一面这里是公司不应该被插入或当你迭代删除。