什么是投影?

53

在数据库理论和使用SetProjection()函数的NHibernate中,“Projection”是什么意思?


可能是什么是NHibernate中的投影?的重复问题。 - philipxy
5个回答

52

投影是关系代数中的基本操作之一。它的输入为一个关系和该关系的属性(可能为空)列表,输出为只包含指定属性的关系,并去除重复元组。换句话说,输出也必须是一个关系。

例如,如果关系R{A,B}包含三个元组{1,10}、{2,10}和{3,20},则在属性列表{B}上对R进行投影将包含2个元组:{10}、{20}。

简而言之,投影与SQL中的SELECT DISTINCT相当(排除包含null和重复列的情况)。


36

简单来说,一个函数接受一个输入(例如数据库中的一行数据),并产生一个输出(例如该行中的某一列,或者基于多列数据进行的一些计算)。


在Hibernate中,生成输出(例如列)的函数在哪里执行?它是在SQL数据库服务器上执行还是在应用程序/ Hibernate服务器上在完整行结果返回后执行?谢谢。 - KyleM
@KyleM:我已经很久没有使用NHibernate了,但我认为它应该作为SQL的一部分被执行。 - Jon Skeet
谢谢。我也是这么认为的。我刚想起还有另一种检查方式(休眠查询日志,我们通常不使用..),所以我会检查并回报。 - KyleM
@KyleM:计数投影肯定是在 SQL 中发生的,如果你查看所发出的查询,它是 select count(columnName) - mtyson

21

Projection意味着查询中的列的子集。

select x, y, z from YourTable 

这里的 x、y、z 是投影。


8
“subset of columns” 意味着“列的子集”,而不是“列的数量”,您的理解是否正确? - CodeManX

2
如果您熟悉SQL或数据库表: Projection是指要返回的字段/列/属性数。 Selection处理要返回的行/记录数。 这里有很好的视频解释:这里这里

虽然这些链接可能回答了问题,但最好在此处包含答案的基本部分并提供参考链接。仅有链接的答案如果链接页面更改可能会变得无效。 - Cleb

2

在Hibernate中,它就像指定要选择哪些列一样。与让映射确定要获取哪些列相反。这意味着您可以通过ProjectionList指定SQL函数、子查询、单个列或可能是所有列。例如,如果您想计算表中的行数,则可以使用SetProjection(Projections.RowCount())


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接