귀하의 선택에 달려 있습니다.당신은 정말 세 가지 선택이 있습니다
하나의 데이터베이스 그들 모두를 지배하는 ... (선택 1)
물론 추가, TenantId
열이 새로운 세입자 (사용자)를 추가 할 쉽게를하지만 몇 가지 단점이있다 :
- 모든 쿼리가 TenantId에 대해 필터링되도록주의해야합니다. TenantId를 우연히 잊고 다른 임차인의 데이터를 반환하는 것은 매우 쉽습니다.
- 모든 최상위 수준의 부모 테이블에는 TenantId가 포함되어야합니다. 귀하의 주요 데이터뿐만 아니라 모든 임차인 특정 부모 데이터입니다.
- 다른 시간대에 다른 스키마 버전을 사용할 수 없습니다. 예를 들어, 응용 프로그램의 버전 1.1에서 일부 데이터 스키마 변경을 수행한다고 가정합니다. 모든 임차인이 동일한 데이터베이스에있는 경우 원하는지 여부에 관계없이 모든 사람이 동시에 업데이트해야합니다. 또한 단일 데이터베이스를 사용하는 경우 거의 동일한 사이트를 사용하여 사이트와 스키마를 동기화 상태로 유지해야합니다. 이렇게하면 새 기능을 얻기 위해 누군가 업그레이드 요금을 청구 할 수 없습니다. 기능은 플러그 - 인으로 빌드해야합니다. 버전 특정 업데이트와 달리 나쁜 것은 아니지만 처음부터 의식적인 결정을 내려야합니다.
- 데이터 복사본을 갖고 싶거나 자신의 데이터를 호스팅하려는 경우 또는 다른 데이터베이스 서버로 이동하려는 경우 세입자의 데이터를 분리해야 할 수 있습니다. 모든 리소스가 공유되기 때문에 하나의 세입자가 보고서 나 트래픽을 통해 리소스를 씹어 서 자신의 데이터베이스 서버로 옮기고 (이 혜택을 상향 판매하는) 상황에 처할 수 있습니다. 또한, 나는 세입자들이 자신들이 다운로드 할 수있는 데이터 사본을 원할 때 상황에 부딪혔다. 모든 데이터가 하나의 데이터베이스에 있다면, 이것은 일종의 일이 될 수 있습니다.
법인 고객에게 판매하려는 경우이 경로를 선택하지 않아도됩니다. 그러나 수천 명의 최종 사용자에게 데이터를 제공 할 필요가없는 세입자로 수천 명을 추가하려는 경우 단일 데이터베이스를 사용하는 것이 올바른 방법 일 것입니다. 스키마에 의해
세그먼트 세입자 (예 Tenant1.Table1, Tenant1.Table2 ... Tenant2.Table1, Tenant2.Table2 ...)
IMO, 이것은 어렵습니다 (나는 당신의 선택이 믿는) 단순히 별도의 데이터베이스를 사용하는 버전. 하나의 데이터베이스를 유지 관리하는 것이 약간 쉽지만 별도의 데이터베이스를 사용할 때와 동일한 문제가 발생한다는 이점이 있습니다. 기업 고객의 경우 데이터베이스
당
세그먼트 세입자, 나는 결국이 간단한을 밝혀 것으로 나타났습니다. 이는 연결 문자열이 잘못되지 않는 한 세입자가 잘못된 데이터를 볼 가능성을 제거합니다. 기업은 자체 시스템을 호스팅 할 수 있습니다. 세입자별로 다른 가상 응용 프로그램을 사용하는 경우 세입자가 다른 버전에있을 수 있습니다. 따라서 리소스 할당, 백업 및 복원 작업을 쉽게 수행 할 수 있습니다. 그것은 단지 (그러나 중요하지 않은) 단점은 셋업 시간 비용 (그리고 따라서 재정적 비용)이다. 새로운 클라이언트를 얻을 때 데이터베이스를 추가하는 것은 어려울 수 있습니다. 기술적으로는 자동화가 가능하지만 여전히 고통스런 일입니다.
결국 결국 타겟 고객에 따라 다릅니다. 만약 그들이 표준 사용자라면, 나는 "그들 모두를 통치하는 하나의 데이터베이스"접근법을 사용하여 많은 코드 리뷰와 자동화 된 테스트를 수행 할 것입니다.기업 고객, 특히 대기업 고객 인 경우 세입자별로 데이터베이스를 별도로 고려할 것입니다.
나는 각 사용자가 고유 한 데이터베이스 테이블을 가지고 있음을 이해하고 있습니까? 이것의 목적은 무엇입니까? –
"select * from table where USER = .."방법으로 이동하십시오. 또한 OR/M을 사용하여 직접 SQL을 작성하는 것이 좋습니다.이 방법을 사용하면 왜 접근 방식이 더 나은지 (즉, 1 사용자 클래스, 여러 사용자 객체) 분명해야합니다.) – tarn