一个面向客户的数据库和一个统一的数据库哪个更好?

本文关键字:数据库 一个 更好 客户 | 更新日期: 2023-09-27 17:54:51

如何有一个单一的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;}
}

一个面向客户的数据库和一个统一的数据库哪个更好?

各有利弊,但我更喜欢每个客户机单独使用数据库实例。这为可能需要的定制提供了更大的灵活性。

例如,如果您有一个工作请求,需要您修改数据库的模式。如果每个客户端都有一个数据库,这就不会是一个巨大的工作量。如果你有一个单独的数据库和一个表来出租你的客户端访问,那么定制的更改会影响所有的客户端,这可能会产生意想不到的后果。

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

最后,每个客户端使用多个数据库更容易管理安全性。每个数据库都明确定义了安全性。

如果您只有一个数据库,那么除非您在实现客户端租赁功能时非常挑剔,否则错误可能导致数据泄露。理想情况下,您希望确保您有足够的单元测试来覆盖任何租用的功能。在许多国家,数据泄露会受到相当严厉的对待。例如,在英国,个人数据泄露可能会导致你被处以超过10万英镑的罚款。

总的来说,我认为这是个人喜好,而不是最佳实践。

相关文章: