Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 柔性持久层_Sql_Mongodb_Entity Framework_Schema_Nosql - Fatal编程技术网

Sql 柔性持久层

Sql 柔性持久层,sql,mongodb,entity-framework,schema,nosql,Sql,Mongodb,Entity Framework,Schema,Nosql,我正在设计一个ASP.NETMVC2应用程序。目前,我正在利用EntityFramework4和可切换的SQLServer和MySQL数据存储 应用程序最近出现了一个要求,即允许用户定义的模型/实体进行操作。现在我不确定SQL/关系数据库是否合适;例如,用户不应该添加/删除“Employee”对象,而应该能够定义“Employee”及其属性-在运行时动态有效地添加/删除表和列 SQL不适合这样做吗?是否有一些选项允许我停留在关系数据库结构中,并且仍然满足这个要求?在实体框架中,我是否可以“动态”

我正在设计一个ASP.NETMVC2应用程序。目前,我正在利用EntityFramework4和可切换的SQLServer和MySQL数据存储

应用程序最近出现了一个要求,即允许用户定义的模型/实体进行操作。现在我不确定SQL/关系数据库是否合适;例如,用户不应该添加/删除“Employee”对象,而应该能够定义“Employee”及其属性-在运行时动态有效地添加/删除表和列

  • SQL不适合这样做吗?是否有一些选项允许我停留在关系数据库结构中,并且仍然满足这个要求?在实体框架中,我是否可以“动态”重新生成.edmx文件,或者是否有实现类似目标的替代方案

  • 我简要介绍了其他选项,如“基于文档的”数据库和“无模式/无sql”数据库,如MongoDb。我还研究了一些序列化格式,如Google的协议缓冲区、JSON和XML。根据您的经验,这些方法中有哪一种特别适合于此目的?序列化性能不是一个大问题


  • 这个应用程序还处于初级阶段,我没有时间限制。基本上,我可以随意重写它,所以如果放弃和重新开始是一个更好的选择,我对此持开放态度。你有什么建议?提前谢谢

    在查看选项之前,我建议(如果您还没有这样做:-),您需要明确定义用户能够定义的内容。一旦有了这些,您就可以推断出所需的灵活性级别,从而推断出完成这项工作所需的数据存储类型

    另一个建议是,如果客户要求能够以任何方式创造任何他们想要的东西——走开。我与各个级别的客户和用户打过交道,可以保证的一件事是,如果用户对有效和高效的数据设计不感兴趣,因此总是会因为忽略而将数据减少为一堆poo


    您需要设置一些边界,以便系统后面的数据存储保持一定的完整性。

    SQL允许您通过ALTER TABLE命令添加和删除列,但目标受众的技能是什么?我问,因为我对人们定义他们的数据模型的想法感到畏缩。大多数人对引用完整性或规范化一无所知——总是想着Excel电子表格。见过Access中设计的数据模型吗?是的,我关心的一件事是,如果我允许他们定义自己的表,他们只会将所有内容打包到一个monster表中…:[我见过这种情况,甚至更糟。如果一个开发人员将包含财务数据的关系数据结构存储在一个表中,该表的字段名为Field1、Field2、Field3……所有字段都是String。Ugg!我从头开始重新编写整个应用程序,因为解开这些垃圾代码会花费更多时间。哦,还有我被要求查看的原因在这个程序中,首先出现了大量关键的转换异常错误:-)+1“如果客户要求能够以任何方式创建任何内容,请走开。”-太正确了!谢谢你的建议。考虑过之后,我决定反对这个要求,它就消失了。很好。我发现,当客户提出看似疯狂的要求时,一个小小的疑问或者表明他们没有必要,或者客户对软件工作原理有误解,或者只是一个糟糕的想法ught通过可更改为更好设计的需求。