2016-12-18 1 views
-4

SQL Server에서 관리 정보 시스템 인 프로젝트에 대한 데이터베이스 구조를 설계해야합니다.하나의 데이터베이스에 하나의 클라이언트 또는 모든 클라이언트가 있습니까?

하나의 마스터 데이터베이스가 있고 새 조직이 웹 기반 응용 프로그램에 가입 할 때마다 시스템에서 해당 클라이언트의 마스터 데이터베이스 사본을 새로 만듭니다. 시간이 갈수록 클라이언트 수가 증가하므로 클라이언트 데이터베이스의 양도 증가합니다.

이 방법을 사용하고 있습니까? 아니면 모든 클라이언트에 하나의 데이터베이스를 사용해야합니까?

+0

내 질문을 이해하지 못하는 이유는 무엇입니까? –

+1

질문을 이해하고 제 대답을 편집했습니다. 귀하의 초기 "새로운 고객이 언제 생겼는지"는 분명하지 않았습니다. – CodeCaster

+1

이것은 끔찍한 나쁜 접근 방식입니다 - SQL Server는 ** 내부적으로 30 개의 회사가있는 "마스터"테이블을 쉽게 ** 처리 할 수 ​​있습니다 - 별도의 데이터베이스를 만드는 데는 ** 전혀 필요 없음 ** (아무런 이점도 없음) 각 고객에게 .... –

답변

1

아니요, 클라이언트 당 하나의 데이터베이스를 만드는 것은 클라이언트가 멀티 테넌트 응용 프로그램의 별도 사용자가 아닌 데이터베이스의 엔터티라고 가정 할 때 좋은 생각이 아닙니다.

클라이언트의 하드웨어, 프로젝트 또는 기타 자원과 같은 다른 엔티티를 등록하려는 경우 별도의 테이블에 저장하고 자원에서 클라이언트로 외래 키를 작성하여 "has-a" 관계.

과 같을 것이다 그 :

클라이언트 :

Id Name 
1 Foo 
2 Bar 

자원 :

Id ClientId Name 
1 1  Resource of Foo 
2 1  Resource of Foo 
3 2  Resource of Bar 

당신은 또한 멀티 테넌시 (multi-tenancy) 시스템과 위의 접근 방식을 취할 수, 여기서 애플리케이션의 모든 사용자는 동일한 데이터베이스 및 애플리케이션에서 실행됩니다.

그런 접근 방식을 사용하면 다른 걱정거리가 있습니다. 예를 들어 단일 데이터베이스가 비율을 벗어나 성능이 떨어지고 백업 및 복원이 쉽지 않을 수 있습니다. 현재 사용자에게 권한이있는 행에 데이터베이스 액세스가 발생하는 경우 응용 프로그램 전체에 검사를 추가해야합니다. 한 사용자의 행동을 롤백하는 것은 어려울뿐만 아니라 특정 사용자에게 새로운 기능을 도입 할 수도 있습니다 (모두 동일한 소프트웨어 및 데이터베이스 스키마에서 실행되기 때문에).

당신이 찾고있는 무엇 인 용어 "다중 테넌트"에 대한 자세한 내용을 읽어

어떻게 응답 ~ 멀티 테넌시를 구현하는 것은 너무 광범위 할 것입니다. 예를 들어 위의 링크에서 MSDN 블로그 시리즈를 참조하십시오. 성능 문제에 관해서는 : 당신 만이 알고 있습니다. 그것은 모두 코드, 데이터, 스키마, 하드웨어 등에 따라 다릅니다. 벤치마킹해라.

+0

나는 하나의 master 데이터베이스를 가지고 있습니다. 우리 조직 (데이터베이스)이 우리 조직의 애플리케이션 그들의 데이터 및 별도의 데이터베이스는 마스터 데이터베이스의 복사본입니다. 30 개의 회사 또는 조직이 우리 시스템을 사용하고 있다면 우리 서버에 30 개의 클라이언트 데이터베이스가 있습니다. –

+0

@ TheComputerScientist 및 30,000 명의 클라이언트가있는 경우 30,000 개의 데이터베이스가 있습니다. 데이터베이스 스키마 변경이 필요한 시스템의 주요 변경 사항을 릴리스하면 해당 스키마 변경 사항을 모든 30K 데이터베이스로 롤백하는 데 얼마나 오래 걸립니까? 아니면 심지어 30 데이터베이스? 새 SQL Server 인스턴스 (업그레이드 등)로 마이그레이션하는 방법은 무엇입니까? 몇 가지 매우 어려운 스케일링 문제에 직면하게 될 것입니다. – alroc

관련 문제