我正在使用 c# 和实体框架代码优先方法开发库存应用程序。
设计要求之一是用户应该能够创建多个公司,每个公司应该有一套完整的库存主表。
例如,每个公司都应该有自己的股票日记帐和项目清单。将来还有一种方法可以将这些公司合并成一个“集团”公司,本质上是合并数据。
使用像 sqlite 这样的基于文件的 RDBMS 之一,它非常简单,我只需要为每个公司创建一个单独的 sqlite 数据库,然后创建一个主数据库将它们绑定在一起。但是我应该如何在单个数据库文件中进行操作!不是多个文件数据库。我不想在每张桌子上都有一个“公司”栏!
我对数据库的有限知识的想法是使用不同的模式进行分离。每个公司的一个模式在每个模式中具有相同的表集,并使用一个单独的模式来保存公共表和表以将其他模式联系在一起。这是一个好方法吗?因为我很难找到一种方法来“动态”首先使用 ef 和代码创建模式。
编辑#1
要了解公司的数量,一个企业大约有 4-5 家公司,每个财政年度关闭旧公司并创建一组新公司。在同一个文件中维护多年的数据本质上是好的,但只要我可以提供一个单独的模块来加载几年的数据,从几个 db 文件中以方便逐年分析,这不是必需的。
就单个公司数据的大小而言,它可以达到每个公司的 GB 标记。
至少在表级别上,模式更改非常频繁,因为它将完全由用户自定义。
我想驱动我的问题的一个方面是这个设计的实现。如果它是一个具有独立桌面界面和实现的应用程序,并且我在像 SQL Server 这样的 RDBMS 服务器上安装了我的数据库,那么数据库的数量并不重要。但是,对于托管在第三方上并使用其数据库服务器的基于 Web 的 UI,可用的数据库数量将受到限制。唯一的解决方案是使用像 SQLite 这样的无服务器数据库。但就一般建议而言,不建议将 SQLite 用于大型企业级数据库。