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-16T14:14:02.813 回答
1

我认为这是正确的方法。我们只在专利表上与客户一起设计,并且已经开始将其非规范化为各种子表。这意味着它可以用于从子表驱动的查询中。它还允许我们按客户端对表进行分区。

于 2013-07-16T12:14:26.250 回答