2012-05-16 2 views
0

android 용 로컬 데이터베이스를 구축하려고합니다. 나는 조금 길다.고성능을 위해 여러 개의 외래 키가있는 데이터베이스 구성

응용 프로그램은

Document 
-------- 
Id 
import date 
List<DocTags> 
extension 
etc 

다음 내가

Location 
------- 
id 
name 
lat 
long 

Company 
------ 
Id 
name 
Street 
town 

약 10 기타 다른 정보를 docTags의 번호를 가지고 ... 나는 다음과 같은 저장해야합니다 .. 문서 관리 응용 프로그램입니다 doc 유형.

문서에 할당 된 모든 docTag ID를 저장하기 위해 테이블이 필요하지만이 테이블은 많은 다른 테이블과 관련됩니다. 내 문제는 내가 doctag ID 또는 여러 doctag ID를 검색하여 문서 목록을 검색해야한다는 것입니다. 40,000 개의 doc 태그와 동일한 수의 문서가 10,000 개 있다고 가정해야합니다. 따라서 성능이 중요한 문제입니다. 데이터베이스를 구성하는 가장 좋은 방법은 무엇입니까?

또한 doctag 이름을 검색해야합니다.

감사

+0

텍스트 검색 엔진에 액세스 할 수 있습니까? 문서 태그를 텍스트로 저장하고 키워드와 마찬가지로 검색 할 수 있습니다. –

답변

2

나는 많은 테이블 태그를 문서와 관련된 가입에 많은이있을 것이다.

아니요,은 여러 테이블에 태그가 있습니다. 그것은 첫 번째 정상적인 형태를 깬다. 다른 테이블이 태그 행을 참조해야하는 경우 JOIN 테이블도 제공하십시오.

아래의 사용자 의견은 정규화 새로 고침이 필요하거나 관계형 모델이 문제에 대해 최선의 선택이 아닐 수 있다고 제안합니다. 아마도 NoSQL, 문서 기반 솔루션이 더 적합 할 것입니다.

+0

데이터베이스에서 40,000 개의 doc 태그를 언급했습니다. 10,000 개의 문서는 각각 4 개의 태그 만 사용합니다. 40,000 개의 고유 한 항목이 있지만 서버 팀이 내게 준 견적은 – jiduvah

+0

입니다. 내 답변의 나머지 부분은 의미합니다. 나는 그 비트를 지울 것이다. – duffymo

+0

조금 벗어났습니다. 처음에는 문서를 검색하기 위해 doctag id를 얻으려면 doctag를 이름으로 검색해야합니다. 그것도 통합 할 수 있습니까? – jiduvah

-2

나는 한 번 또는 두 번 SQLite 만 사용하지만 다른 데이터베이스 시스템에 대한 경험을 토대로 다른 것을 시도하기 전에 단단한 관계형 스키마 인 으로 시작하고 성능을 평가하는 것이 좋습니다.

귀하의 경우에는 스키마가 다음과 같이 보일 것입니다.

Sample DB schema with two doctags

(각 doctag에 대한 두 개의 추가 테이블 물론).

테이블이 많을 것이며 모든 정보를 얻기 위해 꽤 긴 쿼리가 필요합니다. 하지만 이것은 반드시 나쁜 것은 아닙니다. 관계형 스키마를 사용하면 쿼리 옵티마이 저가 작업을 수행 할 수 있으며 향후 쿼리를 훨씬 쉽게 작성할 수 있습니다. 같을 것이다

쿼리

문서를 얻기 위해, 그리고에 대한 정보는 위치 및 회사 (또는 문서가이 태그를 가지고 있지 않은 경우 null을 반환) :

SELECT * FROM Document 
    LEFT JOIN DocumentLocation ON Document.ID=DocumentLocation.DocumentID 
     INNER JOIN Location ON DocumentLocation.LocationID=Location.LocationID 
    LEFT JOIN DocumentCompany ON Document.ID=DocumentCompany.DocumentID 
     INNER JOIN Company ON DocumentCompany.CompanyID=Company.CompanyID 

만약이의 성능 너무 느린 것으로 판명되면 응용 프로그램의 예상되는 사용 패턴에 따라 성능 향상을위한 전략 (예 : 캐싱, 추가 색인)을 조사 할 수 있습니다.

+0

죄송합니다. 다니엘, 당신이 옳은 대답을 시도해 주셔서 감사합니다. – jiduvah

관련 문제