C# 可插拔数据存储体系结构

C# 可插拔数据存储体系结构,c#,database,C#,Database,我有一个可插拔的系统管理工具。这类事物的体系结构是很好理解的(接口、发布/订阅等)。但是数据存储呢。人们做什么 我需要能够添加新实体、扩展现有实体、建立新关系等的插件 我的想法(SQL),不一定经过深思熟虑 每个插件在安装时都只是扩展模式。在过去,改变模式是一个很大的禁忌;现在数据库对此非常放松 插件有自己的表。如果其中两个有一个实体(比如)person,那么有两个表p1_person和p2_person 插件有自己的数据库 发明一种灵活的方案,在那里表格是软打字的。也许许多属性被打包成一个属

我有一个可插拔的系统管理工具。这类事物的体系结构是很好理解的(接口、发布/订阅等)。但是数据存储呢。人们做什么

我需要能够添加新实体、扩展现有实体、建立新关系等的插件

我的想法(SQL),不一定经过深思熟虑

  • 每个插件在安装时都只是扩展模式。在过去,改变模式是一个很大的禁忌;现在数据库对此非常放松

  • 插件有自己的表。如果其中两个有一个实体(比如)person,那么有两个表p1_person和p2_person

  • 插件有自己的数据库

  • 发明一种灵活的方案,在那里表格是软打字的。也许许多属性被打包成一个属性。最终是有一个名为data的大表,表名和列名的键和一个数据值

不是SQL

  • 对象数据库。我没有这方面的经验。任何人都愿意传授经验。例如db4o。随着应用程序的发展,我可以更改对象的“模式”吗
NO-SQL

  • 这就是目前的“现状”。其中大部分似乎与我的需求略有不同。有人想把这些经验传授给别人吗

为这个开放式问题道歉

我的建议是去看看实体框架

您描述的许多情况都可以使用表继承(非常优雅地)解决

你关于一张叫做数据的大桌子的想法让我电脑里的仓鼠哭了;)

一般趋势是远离弱类型模式,因为它们不能在编译时调试。从实体框架之类的东西中得到的是一个强类型的extensislbe模式,您可以使用linq进行编码

对象数据库: 像你一样,我也没有和他们一起玩过massivley——然而,当我考虑他们的时候,在.net中没有好的ORM,编写ado.net代码正慢慢折磨着我

至于NO-SQL,这些数据库满足性能需求。SQL在出现大量小写操作的情况下性能很差。我说的是恶意兜售——它的性能非常好,但当你扩展到数百万并发用户时,一切都变了。我对NoSQL的理解是,它是一种非合理化的格式,专为大量小型快速写入和读取而设计。使用这些网站的规模通常非常大

好的-作为回应

我现在很幸运,能够参与一个绿色领域的项目,所以我正在使用EF生成我的模式。 在非绿地项目中,我使用sql脚本更新表结构。至于在sql中实现表继承,一旦您了解了这个概念,它就非常容易了,它本质上是一个一对多的关系,具有一个约束,即它将永远是0-1

我不会写更新数据库结构的.net代码。。。这听起来像是一场即将发生在我身上的灾难

我开始觉得我误解了你在找什么。我发现数据库是我的第二天性,因为我花了这么长时间与它们在一起


我还没有找到一个可以替代对脚本管理一丝不苟的人

我的建议是阅读实体框架

您描述的许多情况都可以使用表继承(非常优雅地)解决

你关于一张叫做数据的大桌子的想法让我电脑里的仓鼠哭了;)

一般趋势是远离弱类型模式,因为它们不能在编译时调试。从实体框架之类的东西中得到的是一个强类型的extensislbe模式,您可以使用linq进行编码

对象数据库: 像你一样,我也没有和他们一起玩过massivley——然而,当我考虑他们的时候,在.net中没有好的ORM,编写ado.net代码正慢慢折磨着我

至于NO-SQL,这些数据库满足性能需求。SQL在出现大量小写操作的情况下性能很差。我说的是恶意兜售——它的性能非常好,但当你扩展到数百万并发用户时,一切都变了。我对NoSQL的理解是,它是一种非合理化的格式,专为大量小型快速写入和读取而设计。使用这些网站的规模通常非常大

好的-作为回应

我现在很幸运,能够参与一个绿色领域的项目,所以我正在使用EF生成我的模式。 在非绿地项目中,我使用sql脚本更新表结构。至于在sql中实现表继承,一旦您了解了这个概念,它就非常容易了,它本质上是一个一对多的关系,具有一个约束,即它将永远是0-1

我不会写更新数据库结构的.net代码。。。这听起来像是一场即将发生在我身上的灾难

我开始觉得我误解了你在找什么。我发现数据库是我的第二天性,因为我花了这么长时间与它们在一起


我还没有找到一个可以替代对脚本管理一丝不苟的人

我使用EF。这是数据库顶部的ORM层;数据库本身呢。我可能同意仓鼠(实际上我有老鼠)的说法,你可以通过使用类似于migratordotnet的东西来简化sql方案更新——我使用EF。这是数据库顶部的ORM层;数据库本身呢。我可能同意仓鼠(实际上我有老鼠)的说法,你可以使用类似于migratordotnet的东西简化sql方案更新-