Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.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_Visual Studio 2010_Vendor Neutrality - Fatal编程技术网

Sql 建议另一种组织/构建数据库解决方案的方法

Sql 建议另一种组织/构建数据库解决方案的方法,sql,visual-studio-2010,vendor-neutrality,Sql,Visual Studio 2010,Vendor Neutrality,我们使用的是VisualStudio2010,但这是VS2003最先构思的 我会向我的团队提出最好的建议。当前的设置几乎让我呕吐。这是一个C#解决方案,大多数项目都包含.sql文件。因为我们支持Microsoft、Oracle和Sybase,所以我们自制了一个预处理器,很像C预处理器,只是替换是由自制的C#程序执行的,而不使用yacc和类似的工具#ifdef用于条件宏定义,是的-宏就是这样做的。一个宏可以扩展到另一个或两个宏,但最终应该终止。只有宏中有#ifdef——其余类似SQL的代码只使用这

我们使用的是VisualStudio2010,但这是VS2003最先构思的

我会向我的团队提出最好的建议。当前的设置几乎让我呕吐。这是一个C#解决方案,大多数项目都包含.sql文件。因为我们支持Microsoft、Oracle和Sybase,所以我们自制了一个预处理器,很像C预处理器,只是替换是由自制的C#程序执行的,而不使用
yacc
和类似的工具<代码>#ifdef用于条件宏定义,是的-宏就是这样做的。一个宏可以扩展到另一个或两个宏,但最终应该终止。只有宏中有
#ifdef
——其余类似SQL的代码只使用这些宏

现在,各种配置:
Debug、MNDebug、MNRelease、Release、SQL\u APPLY\u ALL、SQL\u APPLY\u MSFT、SQL\u APPLY\u ORACLE、SQL\u APPLY\u SYBASE、SQL\u BUILD\u OUTPUT\u ALL、SQL\u COMPILE
,以及另外两种配置

另外:
任何CPU、混合平台、Win32

让我抓狂的是必须正确配置它,从
12 x 3=36
配置中选择正确的配置,以及必须根据数据库类型替换数据库名称:config、main或gateway。我认为配置应该简化为调试、发布和SQL应用。而且,使用0、1和2似乎很简单。。。 最后,我认为我打算为3种类型的供应商构建或不构建3种类型的数据库,应该只配置一个tic-tac趾板,如:

XOX
OOX
XXX
在这种情况下,它意味着构建MSFT+CONFIG、所有SYBASE和所有网关

尽管如此,使用一个文本文件、一个预处理器和许多配置的整体设备似乎非常笨重。现在是2010年,一定有人会有一个非常干净和/或有创意的工具/解决方案。唯一的优点是现有的宏集合已经过良好的测试

您是否曾经编写过适用于多家供应商的SQL?你是怎么做到的


SqlVars.txt(30个用户中的每一个都会复制一个模板,并根据自己的需要进行修改):

您是否曾经编写过适用于多家供应商的SQL?你是怎么做到的

我用过。检查。由于您使用的是VS2010,因此也可以进行检查。
ORM使您能够高度抽象数据库。仍然会有一些查询需要分别为每个RDBMS手工编制,但根据我的经验,这还不到10%

对于其他商业和开源ORM,请查看Wikipedia文章:

编辑:再交易平台评论:

我从未参与过这样的项目,所以我真的无法给出任何有意义的建议。一般来说,ORM可以帮助您整合数据访问层,并最大限度地减少对RDBMS特定代码的需求。大多数ORM也可以自动生成数据库

对我来说,这场比赛的表现惩罚是什么是不可能的。您应该使用商业和开源的顶级ORM进行一些测试,然后做出决定(微软可能有兴趣与您市场上使用实体框架的公司合作)

另外,不要忘记,在现有产品中引入ORM是很困难的,所以这是您需要考虑的另一个问题

您是否曾经编写过这样的SQL 是否适用于多个供应商?怎么 是你干的吗

基本上,您可以通过在数据层和任何其他层之间添加一层抽象来实现。然后你有两个选择:

  • 使用智能ORM构建数据层并考虑数据库特性
  • 使用提供程序模型创建一个数据层,在该模型中,您为每个受支持的数据库系统创建一个库,并使用从配置文件中读取某些内容的代码来确定要加载哪个提供程序 听起来,在您的情况下,最基本的问题是数据层没有封装到单个库中,并且与任何其他层完全隔离。如果这是真的,那么松散的内聚和紧密的耦合就是你痛苦的根源

    您应该考虑重构当前库,以便所有数据库交互都在单个库中完成,并且完全通过接口将其抽象出来。这可以通过多个发布周期逐步完成,直到最终所有调用都通过一个与数据库无关的接口或抽象类,在这个接口或抽象类中,您有工厂方法为相关数据库加载适当的具体类

    有关更多信息:


    Hm。。。然而,速度在很大程度上是一个问题。我们不能承受2倍甚至1.3倍的性能冲击,否则我们的竞争对手会把我们当作早餐。我将对此进行研究。此外,数据库本身也是通过这个过程构建的——不仅是存储过程,还有表。我认为您建议的是存储过程的替代方案。不幸的是,考虑到速度要求和大量遗留代码,这是一个不可行的想法。这是一个什么样的应用程序?企业CRUD应用程序,如CRM、销售、库存或其他需要大量数据处理的应用程序,如OLAP?
    // This is the default parameters file and should not be changed.
    // You can overwrite any of these parameters by copying the appropriate
    // section to override into SqlVars.txt and providing your own information.
    
    //Build types are 0-Config, 1-Main, 2-Gateway
    BUILD_TYPE=1
    
    REMOVE_COMMENTS=1
    
    // Login information used when applying to a Microsoft SQL server database
    SQL_APPLY_MSFT_version=SQL2005
    SQL_APPLY_MSFT_database=msftdb
    SQL_APPLY_MSFT_server=ABC
    SQL_APPLY_MSFT_user=msftusr
    SQL_APPLY_MSFT_password=msftpwd
    
    // Login information used when applying to an Oracle database
    SQL_APPLY_ORACLE_version=ORACLE10g
    SQL_APPLY_ORACLE_server=oradb
    SQL_APPLY_ORACLE_user=orausr
    SQL_APPLY_ORACLE_password=orapwd
    
    // Login information used when applying to a Sybase database
    SQL_APPLY_SYBASE_version=SYBASE125
    SQL_APPLY_SYBASE_database=sybdb
    SQL_APPLY_SYBASE_server=sybdb
    SQL_APPLY_SYBASE_user=sybusr
    SQL_APPLY_SYBASE_password=sybpwd
    
    ... (THIS GOES ON)