【发布时间】:2014-04-16 17:14:16
【问题描述】:
什么是“阻抗失配”,它与数据库有何关系?
【问题讨论】:
什么是“阻抗失配”,它与数据库有何关系?
【问题讨论】:
假设您有一个通常使用 AAA 的低电流手电筒 电池。不要在家里尝试这个,但假设你可以附上你的 汽车电池到手电筒。低电流手电筒将 可怜地输出了大电流的一小部分光能 电池有能力生产。同样,如果您附加了 AAA 电池到蝙蝠侠的聚光灯下,你也会得到低输出。然而, 将 AAA 电池与手电筒相匹配,它们将运行 最大效率。
因此,如果您将这个讨论带回到软件工程 想象数据流类似于电流,那么 关系数据模型的阻抗与阻抗不匹配 对象层次结构。因此,数据不会以最大值流动 效率,阻抗不匹配的结果。
【讨论】:
关系阻抗不匹配是一组出现的技术难题,因为对象或类定义必须映射到由关系模式定义的数据库表。
具体来说,SQL 的初始版本在计算上并不完整(它们没有任何编程结构,如声明或条件语句),但现在您可以将 SQL 嵌入到高级编程语言(Java、C、Python 等)中。
阻抗不匹配出现了。 SQL 是一种声明性语言,而 C(或您选择嵌入 SQL 查询的任何高级编程语言)是一种过程语言,导致方法的混合并需要大量不必要的工作。
例如,SQL 具有 Date 类型并且一次处理多行数据,而高级编程语言可能使用不同的模型来表示数据(即可能没有 Date 类型)并且只能处理一行数据一次。
我们可能会考虑使用过程结构(SQL/PSM = 持久存储模块)扩展 SQL,以避免阻抗不匹配,并将表视为可以一次访问一行的平面文件。
【讨论】:
面向对象世界和关系世界等两种范式之间的不匹配称为阻抗不匹配。
有 5 个不匹配项...
1) 粒度:- 类和表的数量有时不同。 (在一张表中,我们存储了多个类对象数据。)
2) 子类型:- 面向对象的世界具有继承关系,但关系数据库世界不支持继承。
3) Association:-面向对象的世界有Association关系,但Relational数据库世界不支持Association。
4) 身份:-面向对象世界中对象的身份和关系数据库世界中记录的身份是不同的。
5) 数据导航:-对象数据可以通过其对象引用导航,但表数据不能导航。
如果任何框架完全解决了这种不匹配问题,则该框架称为完美的 ORM 框架。
【讨论】:
https://devblogs.microsoft.com/oldnewthing/20180123-00/?p=97865
在电气工程中,当电气负载的输入阻抗与信号源的输出阻抗不匹配时,就会发生阻抗不匹配,从而导致信号反射或功率传输效率低下(取决于所需的匹配类型)。
这不是微软的意思。
在关系数据库中,当需要将关系数据库转换为面向对象的模型时,就会出现阻抗不匹配。
【讨论】: