【问题标题】:SQL abstractions [closed]SQL 抽象 [关闭]
【发布时间】:2011-07-20 06:40:16
【问题描述】:

为什么某些框架(如 CakePHP、Kohana、Zend、Django、less - Rails)创建某种 SQL 抽象而不是原始 SQL 数据库访问?例如。为什么我们需要做一些变态而不是通常的查询?

UPD:是否有任何用于此目的的 SQL 注入原因?

【问题讨论】:

    标签: sql database orm


    【解决方案1】:

    基本上一个好的抽象层可以让开发者更容易使用数据库,而不用关心他连接的是什么和什么样的数据库,从而加快了开发进程。

    查看http://en.wikipedia.org/wiki/Database_abstraction_layer,这里列出了最常见的优缺点。

    【讨论】:

    • 我认为我们不会很快在不关心底层数据库的情况下编写可扩展的应用程序。
    • 呵呵,没错,但问题是关于数据库抽象层的目的。如果你正在构建可扩展的东西,你必须关心数据库。但是对于一个不需要高负载性能的普通本地应用程序来说,如果您使用 MySQL、PostgreSQL、SQL Server 或其他任何东西,它通常并不重要。在这种情况下,其他方面更为重要(例如许可),一个好的抽象层可以简化适应它。
    【解决方案2】:

    这就是所谓的抽象。通常它是针对特定数据库的独立的。 Sql会根据连接的db类型来构建..

    【讨论】:

      【解决方案3】:

      有两个主要原因。

      • 数据库独立

      代码可以应用于不同的数据库。 MySQL、MS SQL 服务器、ORACLE。并与使用 OBDC(如 MSAccess)或 CSV 文件的其他数据库发生了一些争执。

      • 数据库代码与业务逻辑分离

      大多数框架都遵循这个模型:http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller

      【讨论】:

        【解决方案4】:

        这主要是为了减少所谓的数据库关系存储与应用程序中的域模型之间的阻抗不匹配。如果没有 ORM,您通常会发现自己在编写“左手右手”代码modelobject.property = reader["field],您在其中将从数据库收到的存储格式中的值映射到您的模型中。

        总之,希望 ORM 能让您专注于解决业务问题,而不必担心所有的管道问题。我们还没有到达那里,但我们正在接近。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-10-25
          • 2017-01-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-05-21
          相关资源
          最近更新 更多