2011-05-03 3 views
0

웹 기반 작업 관리 시스템을 구축하려고합니다. 다른 조직이 다른 작업 목록에 액세스 할 수 있기를 바랍니다.웹 응용 프로그램의 기본 데이터베이스 아키텍처

  1. 모든 조직의 모든 작업은 단일 테이블에 저장됩니다. 조직 X와 연관된 작업 레코드에는 X의 ID 번호에 대해 외래 키가 저장되어 있습니다.
  2. 각 조직은 고유 한 작업 테이블을받습니다. 테이블에는 해당 조직에 속한 것으로 식별 할 수있는 접두사가 있습니다. 별도의 테이블은 조직과 테이블 접두사 간의 연관을 저장합니다.

1. 대 2의 장단점은 무엇입니까? 어느 쪽이 더 나은 가늠자? 또한 사용자가 작업의 특정 속성을 끄고 켤 수있게하는 것도 고려하고 있습니다. 예를 들어 작업 시간을 추적 할 수 있습니다. 작업 테이블에서 필드를 추가하거나 제거하여이 작업을 가장 잘 수행 할 수 있다고 상상했습니다. 하지만 서로 다른 조직에서는 서로 다른 구성 설정을 사용하기 때문에이 목적에 더 적합합니까?

답변

2

각 조직에 고유 한 작업 테이블을 제공하는 것은 좋지 않습니다. 새로운 조직이 온보드되어 잠재적 인 코드가 변경되어 새로운 테이블에서 읽을 때 물리적 데이터베이스 변경이 필요합니다 (접두어를 동적으로 변경할 수 있음). 나중에 구조를 변경하려는 경우 더 많은 오버 헤드가 발생합니다. 새로운 필드를 추가합니다. 이로 인해 시간이 지남에 따라 재 설계하고 개선 할 수있는 능력이 제한됩니다. 또한로드를 여러 테이블에 분산 시키면 인덱스와 다른 것들을 동기화 상태로 유지해야한다는 것을 의미합니다. 여러 테이블이 포함되어 있으므로 백업하는 것이 더 번거로 웠습니다.

내가 최고의 솔루션을 생각했을 것이다

는 구조로,이 데이터가 구동하기 위해 다음과 유사하다 :

**OrganisationTable** 
ORGANISATION_ID 

**TaskTable** 
TASK_TYPE 

**TasksOrganisationStatusTable** 
TASK_TYPE 
STATUS (Boolean) 
ORGANISATION_ID 

**TasksTable** 
ORGANISATION_ID 
TASK_TYPE 
DUE_DATE 
etc. 

동적으로 활성화 된 작업을 변경할 수 있습니다이 방법 등 새로운 조직을 설정 성능을 개선하려면 앱에서 캐싱을 사용하십시오.

1

이 검색어는 "multitenant database"또는 "multitenant architecture"입니다.

간략한 개요와 유용한 기사에 대한 링크는 this StackOverflow question입니다.

1

나는 당신이 묘사하는 것처럼 내가 각 "조직"에게 자신의 테이블을 주었던이 일을했다. 새 그룹이 먼저 테이블에서 지원하는 기능에 액세스하면 테이블은 기본 테이블의 빈 사본으로 즉석에서 작성됩니다. 따라서베이스 만 "유지 관리"해야하고, 변경된 경우에는 변경된 감마 테이블에 따라 재구성 될 수 있도록 베이비 테이블을 삭제해야합니다 (기억해야 함).

이 경우에는 정상적으로 작동합니다.

관련 문제