什么更好,一个客户数据库或统一数据库?

时间:2016-07-03 22:06:52

标签: c# sql sql-server entity

如何使用具有管理多个模式的Entity Framework的单个C#应用程序?或者应该是单个架构吗?

我有大约28个客户端,我想知道我是否将每个客户端与一个单独的数据库保持一致或统一在一个数据库中,并且我将信息管理为客户ID。

我担心数据量会影响应用程序性能。我使用的SQL Server 2014目前每个都有一个版本的系统,我们正在发展系统,并希望适合最佳方案。

我相信通过客户端访问登录控制的单个应用程序,最好给予维护。

我不知道是否可以拥有单独的数据库,因为我有一些客户喜欢在他们的服务器中对自己的架构进行安全管理。

如何创建一个动态获取连接字符串的上下文,具体取决于 在请求的来源?

public class ProductRepository {

public void Add(Product product, int clientId)
{
   //Here the connection string will be set according to the client id you are saving information
   var context = ContextFactory.GetContext(clientId);
   context.Products.Add(product);

}

}

或者,最好放在属于该信息的实体客户ID中吗?

public class BaseEntity {

    public int Id {get;set;}
    public int Client_Id {get;set}
}


public class Products : BaseEntity{
    public string Name {get;set;}
    public double Price {get;set;}

}

1 个答案:

答案 0 :(得分:3)

每一方都有利弊,但我更喜欢为每个客户分开数据库实例。这为可能需要的定制提供了更大的灵活性。

例如,如果您有工作请求,则需要修改数据库的架构。如果每个客户端都有一个数据库,那么这不会是一大块工作。如果您有一个带有表的单个数据库来租用您的客户端访问权限,那么定制更改会影响所有客户端,这可能会产生不良后果。

但是,通过使用单独的数据库,您将增加可维护性的开销。理想情况下,您应该为每个客户端(以及它们的版本)保留模式生成的代码迁移或SQL脚本,理想情况下,您将基准核心功能,而不是更改数据库中的核心表添加新表的功能。在管理错误修复时,这可能变得相当复杂,客户端已经对数据库的模式进行了定制更改,并且您正在修补新功能或只是修复已知的错误。

最后,每个客户端使用多个数据库可以更轻松地管理安全性。每个数据库都明确定义了安全性

如果您有1个数据库,那么除非您在实施客户端租户功能方面非常挑剔,否则错误可能会导致数据泄露。理想情况下,您需要确保有足够的单元测试来涵盖任何租赁功能。在许多国家,数据泄露可能会受到严厉的处理。例如,在英国,数据泄露个人数据可能会使您获得超过100,000英镑的罚款。

总体而言,我认为这可归结为个人偏好而非最佳实践。