0

クライアント間で厳密かつ重要なデータ分離を行うマルチテナント データベースがあります。本番環境に導入する前に、私のアプローチが理にかなっているのか、または今後問題 (セキュリティ/パフォーマンス/メンテナンス) につながる可能性があるかを知りたいと思います。以下の 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 を何にでも強制することは理にかなっていますか、それとも親モデルにのみ保持する方がよいでしょうか?

4

2 に答える 2

1

これが正しい方法であるというのが私の意見です。特許テーブルのみでクライアントと設計し、それ以来、さまざまな子テーブルに非正規化する方向に進んでいます。これは、子テーブルから駆動されるクエリで使用できることを意味します。また、クライアントごとにテーブルを分割することもできます。

于 2013-07-16T12:14:26.250 に答える