代码之家  ›  专栏  ›  技术社区  ›  bancer

为多个数据库编写SQL的技巧

  •  2
  • bancer  · 技术社区  · 14 年前

    考虑到开发人员使用提供数据库抽象层的框架(如CakePHP、Codeigniter、Zend等),在编写适合不同数据库(MySQL、PostgreSQL、Oracle、MSSQL、SQLite)的SQL查询时,哪些是好的做法?开发人员应该避免使用什么SQL语法?

    5 回复  |  直到 14 年前
        1
  •  9
  •   OMG Ponies    14 年前

    然后深入研究使用ORM,您会发现对于复杂的查询,它不会执行。人们编写性能良好的SQL已经够难了——我不指望DB抽象层会更好。大多数ORMs支持本机存储过程。。。这违背了使用ORM的目的。

        2
  •  3
  •   Sean Woods    14 年前

    “谨慎使用ansisql”是对您的问题最直接的回答。

    但是,请记住 these words 来自杰里米·扎沃德尼,特别是:

    他们的工具的独特和最强大的功能。在数据库世界,这意味着特定的提示, 索引、数据类型甚至表结构决策。如果你真的把自己限制在 在所有主要RDBMS中都很常见的特性,您给自己和您的客户带来了巨大的伤害。

        3
  •  0
  •   Chris    14 年前

    例如,您可以使用ORM,它将从每个数据库中抽象出细节。尽管您必须确保ORM支持所需的所有数据库。

    Doctrine Propel 是php的好朋友。要么去看看。

    如果你找不到一个支持所有数据库的ORM,那么也许可以找到一个覆盖范围最广的ORM,并扩展php来处理最后一个。尽管我怀疑情况会是这样。

        4
  •  0
  •   Sarfraz    14 年前

    Object-relational mapping (ORM)

    对象关系映射(ORM,O/RM, 是一种编程技术 在不兼容的 编程语言。这就产生了, 实际上,一个“虚拟对象数据库” 可以在 程序设计语言。

    你可以找名人 Doctrine 在外面。还可以看看:

        5
  •  0
  •   Lèse majesté    14 年前

    正如quantumSoup提到的那样,不要这样做。如果您查看一下列出的每个框架,您会发现它们都使用ORM或某种数据库抽象层来插入/提取数据。这允许您编写与所需数据源无关的db中立代码。ORM然后使用正确的数据源“驱动程序”将您的意图转换为每个数据源都能理解的命令。

    所以窍门是1.)为ORM或数据库抽象层定义一个通用接口;然后2.)为ORM编写适当的驱动程序。然后,每次您想要使用新类型的数据源(包括平面文件或CSV),只需添加一个新的驱动程序即可。