关系代数,查找唯一名称

时间:2018-06-18 00:26:15

标签: relational-algebra

说我有以下关系模式:

+-------+------------+
| Name  |   Subject  |
+--------------------+
| 1     |   A        |
| 1     |   B        |
| 1     |   C        |
| 2     |   D        |
| 2     |   E        |
| 3     |   F        |
| 4     |   G        |
| 5     |   H        |
| 5     |   I        |
+-------+------------+

应该返回元组

3  
4  

基本上只需要为1个主题的人提供唯一的名称。

感谢。

2 个答案:

答案 0 :(得分:1)

这是一个基于AntC描述的示例:

NS={
name:string, subject:string
'1'        , 'A'           
'1'        , 'B'           
'1'        , 'C'           
'2'        , 'D'           
'2'        , 'E'           
'3'        , 'F'           
'4'        , 'G'           
'5'        , 'H'           
'5'        , 'I'           
}

(π name NS) - π name (σ s!=subject ((ρ s←subject NS) ⨝ NS))

如果要进行测试,可以尝试以下方法:

https://dbis-uibk.github.io/relax/calc.htm

答案 1 :(得分:0)

Choc Boo,欢迎您使用stackoverflow [relational-algebra]。我强烈建议您找到适合自己的教科书或在线学习资源,以逐步进行学习,最好与其他学习者分享。

您确定要学习RA吗?还是SQL?它们是非常不同的:作为一个菜鸟,学习一个可能会完全混淆另一个。 (除非您深入了解,否则它们之间的联系将变得不清楚。)

有些地方可以在线运行RA。但是请注意,他们使用的是RA的特定方言,这可能不是您要尝试学习的方言。

您的查询可能表示为:

“返回出现在单个元组中的所有Name。”

请注意,我没有提及“仅做1个主题”:关系是集合;如果任何Name出现不止一次,则必须以多个Subject出现。

有一种“快速而肮脏的”答案:对每个Name计数多少个元组;限制结果只返回count == 1的结果。(这样,将需要使用高级RA运算符进行计数。)

有一个漫长的方法,它只使用更多的原始运算符:取两个版本的关系;将每个元组与另一个版本中的每个配对出现在多个元组中的Name将以相同的方式{Name-不同的Subject配对;这些是您不想要Name

“两个版本”是什么意思?了解有关重命名操作(ρ)的信息。 “与……配对”是什么意思?了解加入操作()。 “不想要”是什么意思?了解集合差运算符(-):我说关系是集合。