Oop 一对多合成与数据检索

Oop 一对多合成与数据检索,oop,rdbms,Oop,Rdbms,这是一个经典的问题,我似乎永远也找不到一个我满意的解决方案。对于这个问题,什么是一种面向对象的、优雅的、可扩展的方法 Employee - Name, Phone, Meta, etc Company - Meta, etc - Employee[] CompanyRepository (RDMBS) - Company GetById(int) - Company[] GetAll() 方法1: “GetById”从“tCompany”中选择所有,并左键连接“tEmployee”。sql

这是一个经典的问题,我似乎永远也找不到一个我满意的解决方案。对于这个问题,什么是一种面向对象的、优雅的、可扩展的方法

Employee
- Name, Phone, Meta, etc

Company
- Meta, etc
- Employee[]

CompanyRepository (RDMBS)
- Company GetById(int)
- Company[] GetAll()
方法1: “GetById”从“tCompany”中选择所有,并左键连接“tEmployee”。sqlselect生成12行。返回由12名员工组成的单个公司

“GetAll”与上面的选择相同,但返回12000000行。通过创造性循环和逻辑,每个公司有12名员工,回报1000000家公司

方法2: “GetById”。。。同上

“GetAll”。从“tCompany”中选择全部,但从“tEmployee”中不选择任何内容。Sql select生成1000000行。返回1000000家公司,但每个公司的“雇员”属性为空

方法3 ... 将域拆分为“SimpleCompany”,其中仅包含从“SimpleCompany”继承但具有“Employees”属性的meta和“ComplexCompany”。GetById返回'ComplexCompany',GetAll返回'SimpleCompany'数组


。。。每一个都因为不同的原因闻起来很难闻。

让所有公司12000000行的业务原因是什么?我不建议您一次存储所有12000000行

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

public Company[] GetAllByPageNumber(int pageNumber, int pageSize)
这里的缺点是,在迭代时不应插入或删除公司