클라이언트간에 엄격하고 중요한 데이터 분리를 사용하는 멀티 테넌트 데이터베이스가 있습니다. 프로덕션에 들어가기 전에, 내 접근 방식이 합리적인지 아니면 문제가 보안 / 성능/유지 보수로 이어질 수 있는지 알고 싶습니다. 이 개 모델은 일반적인 시나리오입니다 아래 :멀티 테넌트 데이터베이스에서 ClientId를 처리하는 방법
public class Car
{
[Key, Column(Order=0)]
public int carId {get;set;}
[Key, Column(Order=1)]
public int clientId {get;set;}
...
public virtual ICollection<Component> components {get;set;}
}
public class Component
{
[Key, Column(Order=0)]
public int componentId {get;set;}
[Key, Column(Order=1)]
public int clientId {get;set;}
...
[ForeignKey("carId, clientId")]
public Car car {get;set;}
public int carId {get;set}
}
이 방법으로 모든 모델은이 .Find (함께 사용하도록 강요) 및 많은 많은 관계를 조인 테이블로 강제, 기본 키 클라이언트 ID를 가지고 . 이는 약간의 중복성이 있음을 의미하며 클라이언트 ID는 데이터 분리에 대해 실제로 쿼리가 안전 할 때 사용됩니다.
클라이언트 ID를 아무 것도 지정하지 않거나 부모 모델에서만 유지하는 것이 더 좋을 수도 있습니다.
clientId를 기본 키로 사용 하시겠습니까? 또는 외래 키? –
위의 코드에서 clientId는 실제 id 속성과 함께 복합 키를 형성합니다. 하지만 그게 내가 고민하는거야. 복합 PK에 포함시키고 추가 "체커 (checker)"로 쿼리에 넣거나 유지하고 부모 모델에서만 사용합니다. 특히 보안이 중요합니다. 나는 경험이 없기 때문에 길 아래의 함의를 볼 수 없다. –
왜 스키마 당 임차인을 사용하지 않습니까? –