问题标签 [database-abstraction]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
php - mysqli 或 PDO - 有什么优点和缺点?
取而代之的是,我们在使用 mysqli 和 PDO 来处理诸如准备好的语句和事务支持之类的东西之间进行划分。有些项目使用一个,有些项目使用另一个。我们几乎不可能迁移到另一个 RDBMS。
我更喜欢 PDO 的唯一原因是它允许为准备好的语句命名参数,而据我所知 mysqli 不允许。
当我们整合我们的项目以仅使用一种方法时,选择其中一种作为标准是否还有其他优点和缺点?
php - 哪些 PHP / MySQL 驱动程序或数据库抽象层支持准备好的语句?
我正在开发一个基于默认 PDO 和 PDOStatement 类的扩展版本的项目,因此它使用 PDO 样式命名参数而不是“?” 变量的占位符。
但是,客户现在要求我们考虑使用不同的驱动程序,因为他们的 OS X Web Server 版本显然无法轻松安装此驱动程序。那么是否有人知道任何其他数据库抽象库或数据库访问驱动程序,我可以很容易地使用我们当前的一组功能来扩展它们,这些功能像 PDO 一样采用命名参数?
sql - 数据库抽象 - 支持多种语法
在我正在处理的一个 PHP 项目中,我们需要创建一些 DAL 扩展来支持多个数据库平台。我们遇到的主要缺陷是不同的平台有不同的语法——值得注意的是 MySQL 和 MSSQL 完全不同。
什么是最好的解决方案?
以下是我们讨论过的一对:
基于类的 SQL 构建
这将涉及创建一个允许您逐位构建 SQL 查询的类。例如:
但是,对于单个查询,它确实涉及很多行。
SQL 语法重新格式化
这个选项更简洁——它会读取 SQL 代码并根据输入和输出语言重新格式化它。然而,就解析而言,我可以看到这是一个慢得多的解决方案。
php - 如何处理域层和数据库层之间的通信?
我对为业务逻辑(域)和数据库访问逻辑使用单独的层相当陌生,但是在解决问题的过程中,我遇到了一个问题,我仍然觉得我还没有找到一个很好的解决方案。
澄清我现有的解决方案使用数据映射器直接处理数据库交互。然而,当我进一步调查这个问题时,许多人建议域层不应该直接与数据映射器进行通信,也不应该包含实际执行数据库交互的数据映射器。这就是为什么我将存储库对象放置在域和必要的数据映射器之间,但这感觉不太自然或正确。所以真正的问题是自然存在什么层来处理域和数据映射器之间的通信?任何有关如何构建它的示例都将不胜感激。
例如:
- 如何在另一个域对象的上下文中正确处理检索域对象的集合?
- 如何根据对另一个对象执行的操作强制插入单个域对象或对象集合。我目前面临的情况是,当一个人附加到一个活动时,我需要插入所有需要为该活动执行的人的事件。
design-patterns - 数据库抽象 - 有哪些选项?
如何从我的应用程序中抽象出我的数据库,使其不知道数据库类型?我必须设计一个必须支持 SQL Server 或 Visual FoxPro 作为数据存储库的 .Net 3.5 WPF 应用程序。
我的设计目标是:
- 在数据访问层中编写代码时使数据存储库的类型不可见
- 尽可能快速轻松地在 SQL 和 FoxPro 之间切换
- 允许使用 DAL 中的 ANSI SQL 和存储过程
- 对于加入该项目的其他开发人员来说,学习曲线必须是最小的
这将是一个 WPF 应用程序,可能使用 CSLA。
我曾考虑过使用某种 ORM,但对这种技术没有经验。
python - 有哪些好的 Python 库可以满足以下需求?
有哪些好的 Python 库可以满足以下需求:
- MVC
- 领域抽象
- 数据库抽象
- 视频库(仅用于创建缩略图)
我已经知道 SQLAlchemy 对数据库抽象非常有用,所以除非你想推荐一个更好的,否则不要打扰它。
编辑:这似乎很愚蠢,但我说的是用于 GUI 而不是 Web 的 MVC,只是为了澄清而提及
编辑: MVC 部分是否还包含 GUI 部分,或者我可以为 GUI 使用单独的库,如 PyQt
.net - 数据库抽象层设计 - 以正确的方式使用 IRepository?
我正在设计我的 ASP.NET MVC 应用程序,我遇到了一些有趣的想法。
我见过的许多示例都描述并使用了存储库模式 ( IRepository
),所以这就是我在学习 MVC 时所做的方式。
现在我知道它在做什么,我开始审视我目前的设计,想知道这是否是最好的方法。
目前我有一个 basic IUserRepository
,它定义了诸如FindById()
,SaveChanges()
等方法。
目前,每当我想加载/查询数据库中的用户表时,我都会执行以下操作:
现在我不完全了解 MVC 在用户创建链接时如何创建控制器(不确定每个用户是否有 1 个控制器或每个应用程序有 1 个控制器),所以我不肯定最好的过程行动。
IRepository<T>
我在这里发现了一个关于使用通用存储库接口的好问题,并且RepositoryFactory
在许多博客上似乎也有静态的想法。基本上只保留一个存储库实例,它是通过这个工厂获得的
所以我的问题围绕着人们如何在应用程序中做到这一点,以及什么被认为是好的做法。
人们是否有基于每个表 ( IUserRepository
) 的单独存储库?
他们使用泛型IRepository<T>
吗?
他们是否使用静态存储库工厂?
或者完全是别的什么?
编辑:我刚刚意识到我可能也应该问:
在每个控制器上都有一个私有IRepository
的好方法吗?还是IRepository
每次我想使用它时都应该实例化一个新的?
赏金编辑:我开始赏金以获得更多观点(不是蒂姆没有帮助)。
我更想知道人们在他们的 MVC 应用程序中做了什么,或者他们认为什么是好主意。
orm - ORM 在哪里失败?
我经常听到人们抨击 ORM 不灵活和“抽象漏洞”,但你真的没有听到它们为什么会出现问题。如果使用得当,ORMs到底有哪些缺陷?我问这个是因为我正在开发一个 PHP orm,我希望它能够解决许多其他 ORM 失败的问题,例如延迟加载和缺少子查询。
请具体回答。显示一些代码或描述 ORM 遇到困难的数据库模式。语言或 ORM 无关紧要。
ruby - ruby 的数据库抽象/适配器
您在 Ruby 中使用的数据库抽象/适配器是什么?我主要对面向数据的特性感兴趣,而不是那些具有对象映射的特性(如活动记录或数据映射器)。
我目前正在使用续集。还有其他选择吗?
我最感兴趣的是:
- 简单、干净和明确的 API
- 数据选择(显然)、过滤和聚合
- 没有字段映射的原始值选择:SELECT col1, col2, col3 => [val1, val2, val3] not hash of { :col1 => val1 ...}
- 能够传递要选择的列/值列表: select(array_of_columns) (不是:dataset.select(:col1, :col2, :col3) 要求列是已知的)
- API 以一致(且有效)的方式考虑表模式“some_schema.some_table”;也对此进行反思(从表中获取架构)
- 数据库反射:获取表列的列表,它们的数据库存储类型,也许还有适配器的抽象类型
- 表创建、删除
- 能够在循环中使用其他表(插入、更新)来枚举另一个表的选择,而无需从被枚举的表中获取所有记录
目的是在编写代码时操作具有未知结构的数据,这与通常众所周知的结构或大部分结构的对象映射相反。我不需要对象映射开销。
有哪些选项,包括对象映射库的后端?
php - 数据库抽象和工厂方法
我有兴趣了解有关数据库抽象和工厂方法的 PHP 设计实践的更多信息。作为背景,我的网站是一个共同兴趣的社交网络社区,目前处于测试模式。
目前,我已经开始将用于对象检索的旧代码移至工厂方法。但是,我确实觉得通过在每个函数/方法中分隔大量 SQL 表名和结构来限制自己。
问题:
如果我不期望切换数据库,是否有理由使用 PDO(或类似的)?
PDO 可以与我目前使用的 MySqli 准备好的语句接口吗?
它会帮助我将表名与每种方法分开吗?(如果不是,我还想研究哪些其他设计模式?)
一旦我拥有庞大的会员群,它会减慢我的网站速度吗?