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