关系代数连接 - 需要重命名吗?
Relational Algebra Join - necessary to rename?
假设我有一些 2 个简单的 tables:
重要提示:这是关于关系代数的,而不是 SQL。
频带table:
band_name founded
Gambo 1975
John. 1342
专辑table:
album_name band_name
Celsius. Gambo
Trambo Gambo
现在,由于乐队和专辑 table 共享相同的列名称“band_name”,我加入他们时是否需要重命名?
据我所知,联接消除了在联接之间共享的重复条目。在这个例子中,我简单地选择了专辑 table 中存在的所有乐队(在这个例子中显然只是 'Gambo')
Πfounded, band_name(Band ⋈ Album)
因此应该可以正常工作,对吧?有人可以确认吗?
(必须注意,关系代数有很多变体;它们在语义上不同;它们在语法上也不同。假设您打算使用类似于 wikipedia 中的变体 ...)
是的,该表达式应该可以正常工作。自然连接运算符 ⋈
匹配其两个操作数之间的同名属性。所以子表达式 Band ⋈ Album
产生一个属性为 {band_name, founded, album_name}
的结果。你的表情投射了其中两个。
注意关系值的属性是集合而不是序列;因此,对具有同名属性的关系操作数的任何操作都必须匹配属性。
相比之下,笛卡尔积 ×
要求其操作数具有不相交的属性名称。然后 Band × Album
格式错误,将被拒绝。 (因此您需要在其中一个中重命名 band_name
,以获得可以作为操作数的关系。)
我对您所说的“联接消除了联接之间共享的重复条目”的方式不太满意。因为仅在 SQL 中您会得到一个重复项(来自 SELECT * FROM Band, Album ...
—— 导致 table 有四列,其中两列名为 band_name
)。 SQL FROM
table 的列表是一个拙劣的过程:既不是连接也不是笛卡尔积,而是试图两者兼而有之的东西,结果只是两者都不是。 RA 的 ⋈
从不产生“重复”,所以它从不“消除”任何东西。
特别是如果声明了键和外键约束(从 Album
的 band_name
到 Band
的),我认为它们与 相同乐队,那么自然的操作就是把拆散的组合起来,所以取名'Natural Join'.
假设我有一些 2 个简单的 tables:
重要提示:这是关于关系代数的,而不是 SQL。
频带table:
band_name founded
Gambo 1975
John. 1342
专辑table:
album_name band_name
Celsius. Gambo
Trambo Gambo
现在,由于乐队和专辑 table 共享相同的列名称“band_name”,我加入他们时是否需要重命名?
据我所知,联接消除了在联接之间共享的重复条目。在这个例子中,我简单地选择了专辑 table 中存在的所有乐队(在这个例子中显然只是 'Gambo')
Πfounded, band_name(Band ⋈ Album)
因此应该可以正常工作,对吧?有人可以确认吗?
(必须注意,关系代数有很多变体;它们在语义上不同;它们在语法上也不同。假设您打算使用类似于 wikipedia 中的变体 ...)
是的,该表达式应该可以正常工作。自然连接运算符 ⋈
匹配其两个操作数之间的同名属性。所以子表达式 Band ⋈ Album
产生一个属性为 {band_name, founded, album_name}
的结果。你的表情投射了其中两个。
注意关系值的属性是集合而不是序列;因此,对具有同名属性的关系操作数的任何操作都必须匹配属性。
相比之下,笛卡尔积 ×
要求其操作数具有不相交的属性名称。然后 Band × Album
格式错误,将被拒绝。 (因此您需要在其中一个中重命名 band_name
,以获得可以作为操作数的关系。)
我对您所说的“联接消除了联接之间共享的重复条目”的方式不太满意。因为仅在 SQL 中您会得到一个重复项(来自 SELECT * FROM Band, Album ...
—— 导致 table 有四列,其中两列名为 band_name
)。 SQL FROM
table 的列表是一个拙劣的过程:既不是连接也不是笛卡尔积,而是试图两者兼而有之的东西,结果只是两者都不是。 RA 的 ⋈
从不产生“重复”,所以它从不“消除”任何东西。
特别是如果声明了键和外键约束(从 Album
的 band_name
到 Band
的),我认为它们与 相同乐队,那么自然的操作就是把拆散的组合起来,所以取名'Natural Join'.