SQL到关系代数

时间:2010-06-20 22:41:22

标签: relational-algebra

如何为此SQL查询编写关系代数?

Select patient.name, 
       patient.ward, 
       medicine.name, 
       prescription.quantity, 
       prescription.frequency
From patient, medicine, prescription
Where prescription.frequency = "3perday" 
  AND prescription.end-date="08-06-2010" 
  AND canceled = "Y"

...关系

处方

  • 处方-REF
  • 患者-REF
  • 药-REF
  • 频率
  • 结束日期
  • 取消(是/否))

  • 药-REF
  • 名称

患者

  • 病人-REF
  • 名称
  • 病房

2 个答案:

答案 0 :(得分:3)

我只会指出你应该使用的操作符

投影(π)

π(a1,...,an):结果被定义为当R中的所有元组被限制为集合{a1,...,an}时获得的集合。

例如,患者表上的π(名称)与SELECT 名称 FROM患者

相同

选择(σ)

σ( condition ):选择R中 condition 所有的那些元组。

例如,处方表上的σ(频率=“1周)”与SELECT * FROM处方相同 WHERE frequency =“1perweek”

交叉产品(X)

R X S:结果是R和S之间的叉积。

例如,患者X处方将是SELECT * FROM 患者,处方

您可以组合这些操作数来解决锻炼问题。如果您有任何问题,请尝试发布您的尝试。

注意:由于没有连接,我没有包含自然连接。交叉产品应足以进行此练习。

答案 1 :(得分:3)

一个例子如下。只有当您意外地忽略了患者,药物和处方之间的联接时。如果没有,你会在寻找交叉产品(在这种情况下这似乎是一个坏主意......),正如Lombo所提到的那样。我提供了可能适合您标记为“???”的表格的示例连接。如果您可以包含有用的表格布局。

我还假设取消来自处方,因为它没有前缀。

编辑:如果您需要标准RA格式,可以很容易地从图表中获取。

alt text http://img532.imageshack.us/img532/8589/diagram1b.jpg