2

如何为这个 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"

关系...

处方

  • 处方参考
  • 病人参考
  • 医学参考
  • 数量
  • 频率
  • 结束日期
  • 取消(是/否))

药物

  • 医学参考
  • 姓名

病人

  • 患者参考
  • 姓名
  • 病房
4

2 回答 2

3

我只会指出你应该使用的运算符

投影 (π)

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

例如,患者表上的 π(name) 将与 SELECT name FROM Patient相同

选择 (σ)

σ(条件):选择 R 中条件成立的所有元组。

例如,您的处方表上的 σ(frequency = "1perweek") 将与 SELECT * FROM 处方WHERE frequency = "1perweek" 相同

叉积(X)

RXS:结果是 R 和 S 的叉积。

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

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

注意:我没有包括自然连接,因为没有连接。对于这个练习,叉积应该足够了。

于 2010-06-20T23:08:47.363 回答
3

一个示例如下所示。仅当您不小心遗漏了患者、药物和处方之间的连接时。如果没有,您将寻找 Lombo 提到的交叉产品(在这种情况下这似乎是一个坏主意......)。我给出了可能适合您标记为“???”的表格的示例连接。如果您可以包含表格的布局,那将很有帮助。

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

编辑:如果您需要标准 RA 表格,很容易从图表中获得。

替代文字 http://img532.imageshack.us/img532/8589/diagram1b.jpg

于 2010-06-20T23:11:01.627 回答