2013-01-10 2 views
3

조회를 위해 어떻게 테이블 데이터 구조를 디자인하겠습니까?"다중 결합"키를 사용하여 찾아보기 테이블을 나타내는 데이터 구조

나는 기본적으로 다음 표 내 키는 여기

Country    Activity  Legal_Age 
European   Drink   18 
European   Drive   21 
American   Drink   21 
American   Drive   18 

(나라 & 활동)을 표현해야하고 값은 Legal_age입니다.

나는 std :: map을 사용하여이 문제 (개별 맵으로)를 다음과 같이 분석했다.

national_Activity_age_map

European   European_Activity_age_map 
American   American_Activity_age_map 

European_Activity_age_map

Drink   18 
Drive   21 

Drink   21 
Drive   18 

그러나 원래의 테이블을 열 수 그대로 여기에 문제가 계속 성장 American_Activity_age_map,지도의 수 추가 및 유지 관리가 계속 증가하고 있습니다.

미국 시민과 비 시민권자를 위해 미국에서 별도의 음주 연령을 선택했다고 가정 해 보겠습니다. 그런 다음 새 매핑을 추가하고 기존 매핑을 수정해야합니다.

여러 개의 인수 분해 된 Key를 취하여 하나의 값을 생성하는 DataStructure에서이 데이터를 표현하는 간단한 방법이 있습니까? &

아래와 같은 몇 가지 유사한 질문이 있지만 내 구체적인 문제에 대한 답변은 없습니다. What datastructure would you use to represent this format of data?

업데이트 : 부스트 기능을 이식해야하므로 사용할 수 없습니다. 사용할 수있는 C++ (gcc 4.1.2) 기능이 있습니까?

+0

쿼리 할 열을 말하면 도움이됩니다. 또한 DB 스키마 디자인에 대한 모든 책은이 주제에 관한 것입니다. –

+0

Brian : 위에서 Key는 (Country & Activity)이고 값은 Legal_age입니다. –

+0

map , age> –

답변

8

시도 Boost Multi-Index

부스트 다중 색인 컨테이너 라이브러리는 정렬 및 액세스 의미가 다른 하나 이상의 색인을 유지하는 컨테이너를 구성 할 수있는 multi_index_container라는 클래스 템플릿을 제공합니다. 인덱스는 STL 컨테이너의 인터페이스와 유사한 인터페이스를 제공하므로 친숙한 인터페이스를 사용합니다. 동일한 요소 콜렉션에 대한 멀티 인덱싱 개념은 관계형 데이터베이스 용어에서 차용되며 단순한 세트와 맵으로는 충분하지 않은 다중 인덱스 관계형 테이블의 정신으로 복잡한 데이터 구조를 지정할 수 있습니다.

+0

감사합니다. 그러나 포팅해야하기 때문에 (또는 이와 비슷한) Boost 기능을 사용할 수 없습니다. 사용할 수있는 C++ (gcc 4.1.2) 기능이 있습니까? –

+0

"Boost.MultiIndex는 추가 개체 모듈이 필요없는 헤더 전용 라이브러리입니다." 따라서 필요한 .hpp 파일 만 다운로드하여 프로젝트에 복사 할 수 있습니다. http : //www.boost.org/doc/libs/1_52_0/libs/multi_index/doc/reference/index.html –

관련 문제