2013-05-08 1 views
0

우리는 현재 ASP.net 및 Microsoft SQL Server 2012를 사용하여 웹 응용 프로그램을 구축하고 있습니다. 각 고객은 그 아래에 다른 고객을 추가 할 수 있습니다.각 클라이언트에 대한 새 데이터베이스 또는 색인 키?

우리 회사 -> 우리의 고객 ---> 고객의 고객

인가 그것은 우리의 고객의 각각에 대해 새 데이터베이스를 작성하거나 사용하는 별도의 테이블을 자동으로 자신의 GUI에 키 필터를 적용하는 것이 바람직 ?

+0

DBA 사이트의 [이 질문] (http://dba.stackexchange.com/questions/33782/one-database-per-company-for-security-reasons)을 참조하십시오. – Pondlife

답변

0

(간략하게) 설명 했으므로 각 클라이언트마다 별도의 DB가 필요하지 않습니다. 각 클라이언트가 자신의 응용 프로그램/웹 사이트를 얻는다면 그렇습니다. 그러면 각 클라이언트가 DB (응용 프로그램, 서버 등)의 고유 한 인스턴스를 갖게 할 수 있습니다. 이 경우 각 클라이언트는 서로 상호 작용할 필요가있는 것으로 보입니다. 여러 데이터베이스에있는 경우 수행하기 어렵습니다. 대신 고객을 위해 재귀 테이블을 사용하는 정규화 된 데이터베이스 스키마를 만드는 방법을 찾아보십시오. 이 같은 유사한 스키마를 만들 수 있습니다

tblOurCompany을

회사 ID (PK를 int)를

회사 명 (VARCHAR) ....

tblOurCustomers

custId (pk int)

CUSTNAME (VARCHAR)

custParent (INT)

tblCompany_Customer

회사 ID (PK)

고객 ID를 (PK)

이 빠른 모의 업이있는 테이블입니다 회사 테이블 (여러 개의 회사가 있거나 비즈니스 단위 일 수 있음) 및 고객 테이블 고객이 여러 명인 여러 회사가있을 수 있으므로 company_customers 테이블을 모두 통합하는 테이블이 필요합니다. 그러나이 디자인의 핵심은 고객 테이블을 재귀 적으로 디자인하는 것입니다. 각 테이블에는 기본 키인 customerID와 상위 ID가 있습니다. 상위 ID는 고객 테이블에있는 다른 고객의 pk입니다 (루트 부모는 값 0을 가질 수 있음). 예 :

companyId | companyName | ParentId 
----------------------------------- 
1    CompanyA  0 
2    CompanyB  0 
3    CompanyC  1 
4    CompanyD  1 
5    CompanyE  4 

이 예제에는 5 개의 회사가 있습니다. 2 개는 근태 회사 ​​(CompanyA/B)입니다. CompanyA에는 두 명의 자녀 (C와 D)가 있습니다. CompanyE에는 한 명의 자녀, CompanyD가 있습니다.

데이터베이스 정규화를 이해하는 것이 중요합니다. 각 고객에 대해 다른 DB를 사용하려는 첫 번째 경향을 따르려면 데이터를 얻는 데 많은 어려움을 겪고 (db 라이센스 비용 + 서버 비용 + 공간 등) 많은 불필요한 어려움을 겪을 것입니다. SQL과 그것을 사용하는 응용 프로그램을 사용하여 작업합니다. 정상화에 대한 간단한 소개 : http://databases.about.com/od/specificproducts/a/normalization.htm

다른 질문이 있으면 알려주십시오.

0

모두 예상되는 규모에 따라 다릅니다. "Our Customers"가 10이 될 것으로 예상되면 별도의 데이터베이스가 제대로 작동하지만 여러 데이터베이스에 대한 관리 비용이 추가된다는 것을 이해해야합니다.

"우리 고객"이 장기적으로 100 또는 1,000 일 경우 어떻게 될까요? 1,000 개의 개별 데이터베이스를 관리 하시겠습니까?

여기서 좋은 참조는 Microsoft의 Multi-Tenant Data Architecture입니다.

내 개인 권장 사항 (두 개의 프로덕션 SaaS 시스템에 대한 경험에 기반)은 단일 데이터베이스와 단일 테이블을 갖는 것입니다.

  • PK :

    고객 테이블 (거주자로 생각할)

    • PK : TenantID, CustomerID를

    고객 (임차인) 고객 테이블 TenantID FK : TenantID

관련 문제