クライアント間で厳密かつ重要なデータ分離を行うマルチテナント データベースがあります。本番環境に導入する前に、私のアプローチが理にかなっているのか、または今後問題 (セキュリティ/パフォーマンス/メンテナンス) につながる可能性があるかを知りたいと思います。以下の 2 つのモデルは、典型的なシナリオです。
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}
}
このように、すべてのモデルは clientId を主キーとして持ち、強制的に .Find() で使用し、多対多の関係の結合テーブルに強制します。つまり、かなりの冗長性があり、クエリが実際にデータ分離に対して非常に安全である場合に clientId が使用されます。
clientId を何にでも強制することは理にかなっていますか、それとも親モデルにのみ保持する方がよいでしょうか?