2011-07-06 2 views
0

.net mvc 및 sqlserver db를 사용하고 있습니다. 우리는 또한 데이터 액세스에 대한 NHibernate에를 사용하는단일 공유 데이터베이스가있는 다중 테넌트 데이터베이스

편집 할 수 있습니다. 나는 우리 자신의 SQL을 작성하거나 procs를 저장하지 않기 때문에 이것을 언급한다. db에서 트리거가 작동하지만 데이터베이스간에이를 수행 할 수 있는지 여부는 알 수 없습니다.

우리는 각 클라이언트가 DB의 거기에 자신의 인스턴스가 이렇게 설정 멀티 테넌트를 갖고 싶어 END 편집. 그러나 우리는 각 사용자가 많은 사용자 정보를 가진 다른 데이터베이스에 연결할 필요가 있습니다. 그들 사이에 약간의 공유 데이터가있을 것입니다. 기본적으로 세입자는 공유 데이터베이스에서 사용자의 데이터를 참조합니다.

일부 사람들은 공유 데이터베이스 (독립 클라이언트)만을 사용하게 될 것이므로 그들은 테넌트 클라이언트 중 하나가 잘 고용 할 수 있습니다. 세입자는 공유 데이터베이스에서 새 직원 데이터에 액세스하려고합니다. 또한 직원은 한 명의 세입자를 떠나 다른 세입자와 탈퇴 할 수도 있고, 탈퇴 할 수도 있습니다. 물론 우리는 각 임차인에게 공유 데이터베이스 스키마를 가질 수 있으며, 일부는 왼쪽 또는 조인 할 때마다 큰 수출 임포트를 수행 할 수 있습니다. 그러나 이것은 많은 어려움처럼 보입니다.

나는 세입자가 공유 데이터베이스에 대한 참조를 가지지 만 참조 무결성은 없다는 사실을 관리하는 방법에 대한 조언을 구하고 있습니다. 또는 대체 접근법 등이있는 경우. 감사합니다. Raif

답변

2

데이터베이스를 통해 선언적 참조 무결성 (외래 키)을 포기해야합니다. 그러나 트리거를 사용하거나 트리거 대신 사용할 수 있습니다 (필요하다고 생각되는 경우). 또는 스토어드 프로 시저를 통해 모든 데이터 조작을 제어하는 ​​경우이를 수행 할 수 있습니다 (삽입 또는 갱신시, 예를 들어, 먼저 점검 할 수 있음). 또는 수정의 일부로 다른 데이터베이스의 테이블에 대해 EXISTS를 조인하거나 EXISTS를 사용하여 유효한 값이 사용되고 있는지 확인하십시오.

필자는 멀티 테넌트 모델을 사용하여 비용을 감당할 수있는 많은 이점 (예 : 일부 경우 DRI 포기)이있을 수 있습니다. 대부분이 참조 데이터이고 자유 텍스트 입력이 아닌 것들을 위해, 많은 노력이 필요하지 않습니다.

+0

안녕하세요, 입력 해 주셔서 감사합니다. 나는 sprocks가 아니라 nhibernate를 사용하고 있음을 보여주기 위해 나의 질문을 편집했다. 트리거를 사용하거나 사용하지 않아도 익숙하지 않습니다. – Raif

+0

공유 데이터에 참조 무결성을 적용하려는 경우, 분명히 한 가지 방법입니다. 이것이 필요한지 다시 말하면 내가 말하기가 어렵습니다. –

+0

흠, 예. 방아쇠가 작동하지 않을 수도 있습니다. 공유 DB의 데이터가 변경되어 세입자가 엉망이 될까 우려됩니다. 하지만 공유 DB에 방아쇠를 당기고 가서 올바른 세입자를 찾고 거기에 정보를 올려 놓을 수는 없습니다. 공유 된 db는 연결되어있는 세입자에 대한 참조를 갖지 않습니다. – Raif

관련 문제