2010-02-10 3 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'같음 위와 동일하게 선택하지만 12,000,000 개의 행을 반환합니다. 창조적 인 루프와 논리를 통해 100 만 명의 기업에 12 명의 직원이 있습니다.

접근법 # 2 : 'GetById'...

상기와 같은 'GETALL'. 'tCompany'에서 모두 선택하지만 'tEmployee'에서는 선택하지 않습니다. Sql select는 1,000,000 개의 행을 산출합니다. 1,000,000 개의 회사를 반환하지만 각각 '직원'속성이 없습니다. 3

접근 # 1 ... 'SimpleCompany'만을 함유하고 메타 'SimpleCompany'상속하지만 임직원 '속성이'ComplexCompany '로 영역을 분할. GetById는 'ComplexCompany'를 반환하고 GetAll은 'SimpleCompany'배열을 반환합니다.

... 각기 다른 이유로 냄새가납니다.

답변

0

모든 회사 (12,000,000 행)를 얻는 데 비즈니스 이유는 무엇입니까? 한 번에 12,000,000 개의 행을 모두 메모리에 저장하도록 권하지 않습니다.

페이지 매김을 사용해야 할 수도 있습니다. 한 번에 제한된 수의 회사를 선택한 다음 행이 반환되지 않을 때까지 한 페이지에서 다른 페이지로 반복합니다.

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

여기에서 단점은 반복하는 동안 회사를 삽입하거나 삭제해서는 안된다는 것입니다.