如何构造许多和/或复杂的SQL查询?

如何构造许多和/或复杂的SQL查询?,sql,Sql,由于有相当多的SQL查询,其中许多是临时查询,数据库变得有点混乱。我有两个问题: 仅使用名称来组织视图/存储过程时,很难将许多不同的视图/存储过程保持有序 子查询(在2-4级调用其他视图的视图)会增加结构混乱,并且很难维护 现在我想在我的数据库和/或C#代码中获得更好的结构(可以是java/python/ruby/随便什么)。怎么做 我应该在SQL中使用“模式”来分隔不同区域中的视图吗?比如名称空间 我应该避免在数据库中使用大量的TSQL,而是将查询保留到我的C#吗?这将使数据库逻辑更接近系统的

由于有相当多的SQL查询,其中许多是临时查询,数据库变得有点混乱。我有两个问题:

  • 仅使用名称来组织视图/存储过程时,很难将许多不同的视图/存储过程保持有序
  • 子查询(在2-4级调用其他视图的视图)会增加结构混乱,并且很难维护
  • 现在我想在我的数据库和/或C#代码中获得更好的结构(可以是java/python/ruby/随便什么)。怎么做

    我应该在SQL中使用“模式”来分隔不同区域中的视图吗?比如名称空间

    我应该避免在数据库中使用大量的TSQL,而是将查询保留到我的C#吗?这将使数据库逻辑更接近系统的其余部分,并且在代码版本控制中更易于维护和保持,但同时我希望靠近数据,以保持良好的性能(在SQL profiler的帮助下)

    还有其他建议吗


    更新:数据库和c#-项目已经有几年的历史了,并且已经增长,并且将随着时间的推移继续增长(不同的功能领域)+将添加新的项目。我需要以一种好的方式清理它,或者改变策略。

    我刚刚找到了Martin Fowler的这篇文章“域逻辑和SQL”

    先表演

    “人们用这种方式考虑的第一个问题是性能。就我个人而言,我不认为性能应该是第一个问题。我的理念是,大多数时候,您应该专注于编写可维护的代码。然后使用探查器识别热点,然后仅用更快但不太清晰的代码替换这些热点”

    维修性

    “对于任何长寿命的企业应用程序,您可以肯定一件事——它将发生巨大变化。因此,您必须确保系统的组织方式易于更改。可修改性可能是人们将业务逻辑放在内存[=应用程序代码而不是TSQL]中的主要原因。”

    封装


    “使用视图或存储过程只能在一定程度上提供封装。在许多企业应用程序中,数据来自多个源,不仅来自多个关系数据库,还来自遗留系统、其他应用程序和文件。[…]在这种情况下,完全封装实际上只能由应用程序代码中的一层完成,这进一步意味着域逻辑也应该位于内存中。”

    好的,为什么C代码中的复杂性比TSQL中的复杂性更容易管理?

    这一定是因为您的C#工具或C#知识更优秀。您应该解决这一问题

    您可以采用命名约定并组织文件来帮助完成此任务。使用开发环境支持TSQL和源代码管理。确保您可以以编程方式部署新的和升级的数据库架构。就像使用C#一样

    如果不知道你的项目的细节,我无法指定一个确切的结构

    您应该如何决定在何处实施逻辑?

    在一般层面上,这很简单

    数据库应该执行基于集合的操作,这些操作可以从对数据使用索引中获益。此代码更容易用TSQL和其他基于集合的查询语言编写

    您的应用程序/业务层应该执行行级操作,最好是以无状态(
    共享
    /
    静态
    )的方式。此代码更易于用c#和其他过程语言编写

    扩展数据库服务器比无状态应用程序层更困难。如何在多台计算机之间保持同步



    没有确切的正确答案。有很多种灰色。最好的解决方案是基于你的需求。从Derfto VS 2013开始,SQL 2012,C→,EF6,从那里美化或简化。

    你应该考虑可扩展性吗?能够增加更多的服务器吗?不是主要的,但是我需要知道我做的事情是否使MOR增加。e很复杂。你是说MS SQL Server吗?我不确定你能得到像这个问题这样开放的问题的明确答案。是的,但我确实认为在任何SQL db中问题都可能是相同的。将查询保留在代码中是什么意思?你是使用LINQ还是使用ADO.NET?谢谢,是的,我添加了一些关于该项目的信息.这不是确切的结构-更像是一个好的、经经验证明的、我需要的策略。我从未使用过模式,并且觉得工具(SSM)在那里不是很好。我认为(非模式)我的结构只是一个糟糕的软件实践的例子,维护起来很麻烦。我认为您更喜欢将TSQL保留在DB中,在视图和存储过程中,并且只添加一个精简的“每个视图/存储过程一个函数”“C#中的层?我对SQL有很长时间的经验,但可能需要深化它,或者需要更好的工具。现在我将看一看Redgate。好的,现在使用模式,结构更好了。SSMS对模式的有限UI帮助愚弄了我,但编写一些sql命令并不是那么多工作。