一对多组合和数据检索

时间:2010-02-10 19:59:27

标签: oop rdbms

这是一个经典的问题,我似乎无法想出一个我满意的解决方案。对于这个问题,什么是OO优雅和数据库可扩展的方法?

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'相同选择如上,但返回12,000,000行。通过创意循环和逻辑返回1,000,000家公司,每家公司有12名员工。

方法#2: 'GetById'......与上面相同

'GETALL'。从'tCompany'中选择全部,但不从'tEmployee'中选择。 Sql select产生1,000,000行。返回1,000,000家公司,但每家公司都有一个空的'Employees'属性。

方法#3 ...将域拆分为仅包含元的'SimpleCompany'和'ComplexCompany',它继承自'SimpleCompany'但具有'Employees'属性。 GetById返回'ComplexCompany',GetAll返回'SimpleCompany'数组。

......各种气味因各种原因而闻起来。

1 个答案:

答案 0 :(得分:0)

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

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

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

这里的缺点是在迭代时不应插入或删除公司。