我有2个关系(表格):
商店(邮政编码(PK),SuburbName,BottleShopName(PK),地址),
人(人名(PK),邮政编码(PK),酒精消费)
如果我写下一个将返回每个瓶子商店名称的查询 数据库及其郊区使用关系代数,它看起来像这样:
πBottleShopName,SuburbName(商店)。
此查询的限制是不显示任何冗余数据。假设有两个不同的瓶店名称具有相同的名称且位于同一个郊区且具有相同的邮政编码,则上述查询将忽略第二个。
我应该对此查询进行哪些修改才能使用关系代数显式获取结果?
答案 0 :(得分:0)
由于这个问题缺少使用过的查询,这就是我对您的问题的理解:
SELECT BottleShopName, SuburbName FROM Shops JOIN People ON People.Postcode = Shops.Postcode WHERE People.PersonName = ?
答案 1 :(得分:0)
假设有两个不同的瓶店名称具有相同的名称并且在同一个郊区且具有相同的邮政编码,则上述查询将忽略第二个。
关系代数关系是元组的集合。它们不能有两个具有所有相同属性值的元组。
关系保存从给定谓词创建真实语句的行 - 由属性名称参数化的填空填充句子模板。
假设商店拥有行,其中&#34;瓶子商店有邮政编码邮政编码,郊区名称 SuburbName ,名称 BottleShopName 和地址地址&#34 ;.如果,对于某些特定值 Postcode , SuburbName , BottleShopName &amp; 地址,有多个商店包含邮政编码邮政编码,郊区名称 SuburbName ,名称 BottleShopName 和地址< em>地址然后在关系中仍然只有一个具有这些值的元组。
如果可能有多个商店并且您想知道那么您需要一个不同的谓词。您可以保留类似商店的数量:&#34; N 瓶子商店有邮政编码邮政编码,郊区名称 SuburbName ,名称 BottleShopName 和地址地址&#34;。或者您可以为每个商店分配一个唯一的名称或 id ,然后使用:&#34;由 id 标识的瓶子商店有邮政编码邮政编码,郊区名称 SuburbName ,名称 BottleShopName 和地址地址&#34;。 (仍然没有重复。)
关系模型中关系是类似元组的原因是,如果关系R和S具有谓词r和s,那么:
R JOIN S有谓词(保持元组在哪里)r AND s,
R UNION S有谓词(保持元组在哪里)r OR s,
R MINUS S有谓词(保持元组在哪里)r AND NOT s,
RESTRICT 条件 R有谓词(保持元组在哪里)r AND 条件,
RENAME A N R具有谓词(保持元组所在位置)r, A 替换为 N ,并且
PROJECT R有一个谓词(保持元组在哪里)对于某些属性而不是A ,r。
即查询也有一个谓词,它的元组也是使其谓词成为真实语句的元组。所以查询意味着编写一个我们想要满足元组的谓词。
在SQL中,表可以有重复的行。因此,您无法以这种方式推断出在给定应用程序情况下表中应该包含哪些行,表中根据其中的行说明应用程序情况,或者查询根据其输入要求的行,其操作员和应用情况 - 特殊情况除外。 (例如,通过在表中讨论一行来说明某些事情是没有意义的。)这可能是SQL违反关系模型并且使用起来毫无意义的最深刻的方式。