C# 导航选择数据库结构/引擎

C# 导航选择数据库结构/引擎,c#,sql,oracle,nosql,ravendb,C#,Sql,Oracle,Nosql,Ravendb,在我的工作场所,我们偶然发现了一个问题,我们需要创建一种库存应用程序,它为每个对象存储不同类型的属性,并具有动态处理属性/列的能力,也就是说,我们不希望每次为现有对象创建新属性时都必须修改应用程序(比如说,现在我们需要考虑蓝牙硬件!)或者当一个新对象出现时(现在我们需要考虑游戏板!)。这些对象当然必须是可读的和可编辑的 虽然我们是传统的以SQL为中心的(Oracle、MySQL、MSSQL),但我并不反对以任何其他方式(比如说NoSQL)来实现这一点,因为我们从未处理过这一点,而且对此有点忘记。

在我的工作场所,我们偶然发现了一个问题,我们需要创建一种库存应用程序,它为每个对象存储不同类型的属性,并具有动态处理属性/列的能力,也就是说,我们不希望每次为现有对象创建新属性时都必须修改应用程序(比如说,现在我们需要考虑蓝牙硬件!)或者当一个新对象出现时(现在我们需要考虑游戏板!)。这些对象当然必须是可读的和可编辑的

虽然我们是传统的以SQL为中心的(Oracle、MySQL、MSSQL),但我并不反对以任何其他方式(比如说NoSQL)来实现这一点,因为我们从未处理过这一点,而且对此有点忘记。然而,我们需要使用ASP.NET MVC进行开发


任何指导都将不胜感激。

事实上,您所描述的问题可以通过关系数据库管理系统完美解决,但这将花费您的团队更多的时间。我认为文档数据库对您来说是一个更好的选择。 RavenDB是一个很棒的文档数据库,它结合了关系数据库和文档数据库的优点。它是完全符合ACID的,它有一个出色的Linq提供程序,而且速度非常快,尤其是最新版本

所以我的建议是,在你尝试之前,你永远不会确切知道。到目前为止,我在ravendb上遇到的唯一问题是对索引的把握。文件中缺少一些重要的注释,我希望Ayende能很快解决这个问题,否则,就去做吧


顺便说一句,你也可以试试MongoDB。它不是符合酸的,它也没有LINQ提供程序,而且写查询比你猜的在RavenDB更难,但是它是用C++编写的,具有原子I/O操作,而且非常快。

< P>如果你的要求是存储和处理结构化数据(或者声音文件、图像等),你就习惯了Oracle,我建议研究LOB和XMLType。Oracle内置了对XML技术的支持(模式验证、xslt转换、二进制存储、xpath索引可能是您感兴趣的领域).

请您详细说明为什么您认为团队需要更多的时间来应用他们已经知道的工具。@hal9000您知道的东西并不意味着如果您使用熟悉的工具,您会节省时间/成本。与关系数据库相比,文档数据库的主要优势在于,您不需要定义数据库模式、与数据对象同步、处理ORM或DAL,并且模式更改不需要同时修改数据库和对象级别。当然,除了索引之外,docdbs没有太多的学习曲线,尤其是ravendb。只要写域对象,它们就已经是持久的了。不必重复我上面提到的那些痛苦的步骤。@Davita我的困惑部分来自“动态”对象,也就是说,完整的实体应该动态创建,那么我该如何编写或设置动态域对象呢?对不起,我迷路了。@rebelliard如果我是你,我会将产品的动态属性声明为键值对的集合(可能是字典?)。在这种情况下,您将拥有动态域对象的可扩展性。否则,您可以使用.NET4中引入的C#的新动态特性。如果您选择最后一个选项,这里有一个链接,说明如何使ravendb与C#的dynamic配合使用feature@Davita谢谢您最后的评论看起来是一个非常可行的解决方案。:)