如何为给定模式提供关系代数?

How to provide relational algebra for the given schema?

员工(姓名、街道、城市)

工作(人名、公司名称、薪水)

公司(公司名称,城市)

MANAGES(PERSONNAME,MANAGERNAME)

查找此数据库中所有不为 First Bank Corporation 工作的员工的姓名(假设所有人都为一家公司工作,并且允许这些人出现在数据库中(例如在员工中)但不出现在有效)。

这里假设部分没看懂。它到底是什么意思?

正如@wildplasser 所指出的:假设的第一部分

assuming that all people work for exactly one company...

声明员工和公司之间存在完全关系的情况。这意味着不允许在员工与任何公司无关的情况下拥有数据记录。这就是假设的第二部分开始的地方

... and people are allowed to appear in the database (e.g. in employee) but not appear in works

所以这告诉我们甚至可以让员工与任何公司无关。

对我来说,现在我会得出结论,这个问题要求公司和员工实体之间的零或一个关系。

TL;DR: 也许你的意思是你 "do not understand the assumption part" 正在查询 。很好,因为没有查询假设的部分。

PS: 正如其他答案所指出的那样,这些断言似乎自相矛盾。它们不清楚,查询也是如此。我怀疑 "all people work for exactly one company" 意味着 "people in works work for exactly one company";否则 直接 的含义与 "people are allowed to appear in [employee] but not appear in works" (因此失业)的假设相矛盾。我怀疑 "names of all employees in this database" 表示 "people in employee",根据 "in the database (e.g. in employee)".


要查询,您只需要了解某行在什么时候在table(基本变量或查询结果)中,什么时候不在。即如何知道 table 的 含义 又名 谓词 ,一个填入(命名)空白语句,其中列是参数:

-- employee PERSONNAME lives on STREET in CITY

在工程和数学中传统上使用名称和参数作为 shorthand:

-- EMPLOYEE(PERSONNAME,STREET,CITY)

具有 table 列的每一行都通过为其列值提供参数来声明又名 proposition

(Frank, 1st Avenue, Mytown) proposition from EMPLOYEE predicate:
    -- employee Frank lives on 1st Avenue in Mytown
    -- EMPLOYEE(Frank, 1st Avenue, Mytown)

使命题的行进入和table中,而那些不正确的行则没有。因此,每个存在的行都陈述了它的命题,每个不存在的行都陈述了它的命题。 A table 包含使其谓词成为真命题的行。

关系运算符的设计使得结果的meaning/predicate是其输入的meaning/predicate的特定组合:

R  -- holds rows where R(...)
S  -- holds rows where S(...)
R JOIN S  -- holds rows where R(...) AND S(...)
R UNION S  -- holds rows where R(...) OR S(...)
R MINUS S  -- holds rows where R(...) AND NOT S(...)
R PROJECT columns to keep  -- holds rows where FOR SOME columns to drop, R(...)
R RESTRICT condition  -- holds rows where R(...) AND condition

(重新使用 SQL,它们的混合体(不幸的是不忠实且笨拙),参见 this answer。)

您的作业:

EMPLOYEE(PERSONNAME, STREET, CITY)
WORKS(PERSONNAME,COMPANYNAME, SALARY)
COMPANY(COMPANYNAME, CITY)
MANAGES(PERSONNAME, MANAGERNAME)

Find the names of all employees in this database who do not work for First Bank Corporation

我们想要 table 行使某些 meaning/predicate 为真。重新措辞以获得我们想要的:

-- employee PERSONNAME does not work for FBC

我们必须根据给定的meanings/predicates来表达这个meaning/predicate:(我必须那些是什么,因为你没有给他们。)

-- rough draft with only relevant columns
-- ... [employee PERSONNAME ...]
AND NOT ... [employee PERSONNAME works at COMPANY ... AND COMPANY = FBC]

-- full base predicates but drop/keep columns appropriately
-- FOR SOME STREET & CITY [employee PERSONNAME lives on STREET in CITY]
AND NOT FOR SOME COMPANY & SALARY
        [employee PERSONNAME works at COMPANY for $SALARY AND COMPANY = FBC]

-- shorthand
-- FOR SOME STREET & CITY [EMPLOYEE(PERSONNAME, STREET, CITY)]
AND NOT FOR SOME COMPANY & SALARY
        [WORKS(PERSONNAME,COMPANYNAME, SALARY) AND COMPANY = FBC]

对于 table 行,我们将逻辑运算符转换为关系运算符,并将基础 table 谓词转换为名称:

    PROJECT PERSONNAME (EMPLOYEE)
MINUS PROJECT PERSONNAME (RESTRICT COMPANY = FBC (WORKS))

(您的关系代数变体可能有不同的运算符。)

约束 是对哪些应用程序情况和相应的数据库值可能出现的限制。它们是 "assumptions" 因为它们被认为是真实的。它们是业务规则(包括相关程序、物理定律和数学真理及其后果)。与描述基数或查询 "finds" 一样,它们可以改写为 meanings/predicates 使用关于当前情况的自然语言 and/or 使用关于当前基数的相应关系表达式 [=128] =] 值。 (因为它们始终为真,所以 meanings/predicates 是 statements/propositions。因此它们的查询版本都将 table 作为结果值,没有列和一行。所以它们不需要 base tables.)

查询不需要约束。它们总是评估为真语句,因此将它们与查询结合(ANDing)statement/proposition不会影响哪些行进入和远离基地。 (它们确实暗示了根据构成基数 table 对查询表达式的约束。此外,它们允许 DBMS 防止不可能的数据库值,并且它们帮助用户检查对基数 table [=117= 的理解].)

虽然给你这个任务的人可能不明白这一点。您可以问他们:如果这些约束中的任何一个成立,那么查询表达式会有什么不同? (答案:不会。)

tablemeanings/predicates还没有给出。 也许 断言是试图解释 "employee" 在查询中相对于 employeeworks 的(未给定)含义的含义。