c# - 客户数据库还是统一数据库哪个更好?

标签 c# sql sql-server entity

<分区>

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

我有大约 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;}

}

最佳答案

各方各有利弊,但我更喜欢为每个客户端分离数据库实例。这为可能需要的定制提供了更大的灵 active 。

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

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

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

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

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

关于c# - 客户数据库还是统一数据库哪个更好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38174752/

相关文章:

mysql - SQL:将多个表合并为一个

sql-server - 是否可以授予执行它的用户没有的存储过程执行权限

sql-server - Entity Framework Core + 空间数据正在引发 SRID 无效错误

mysql - 如何根据丰度对行进行排序?

c# - 这个简单的更新查询有什么问题?

c# - 在 SQL Server 中保存文件和图像

c# - 获取 Oracle 数据库名称

c# - 复制委托(delegate)

c# - SHA256 支持整数吗?

c# - Windows.UI.Xaml.Media ==> 没有画笔