关系代数连接 - 需要重命名吗?

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 的 从不产生“重复”,所以它从不“消除”任何东西。

特别是如果声明了键和外键约束(从 Albumband_nameBand 的),我认为它们与 相同乐队,那么自然的操作就是把拆散的组合起来,所以取名'Natural Join'.