Это классическая проблема, с которой я никогда не смог бы найти решение, которое меня порадовало. Что будет считаться ОО-элегантным и масштабируемым БД подходом к этой проблеме?
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 дает 1000000 строк. Возвращает 1 000 000 компаний, но каждая из которых имеет нулевое свойство «Сотрудники».
Подход № 3
... разделить домен на SimpleCompany, содержащую только meta и ComplexCompany, которая наследуется от SimpleCompany, но имеет свойство Employees. GetById возвращает значение ComplexCompany, а GetAll возвращает массив SimpleCompany.
... каждый пахнет плохо по разным причинам.