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

时间:2015-09-27 19:20:56

标签: database database-design relational-database relational-algebra

员工(PERSONNAME,STREET,CITY)

WORKS(PERSONNAME,COMPANYNAME,SALARY)

公司(COMPANYNAME,CITY)

MANAGES(PERSONNAME,MANAGERNAME)

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

这里我不理解假设部分。它究竟意味着什么?

2 个答案:

答案 0 :(得分:3)

TL; DR:也许你的意思是你不理解假设部分" 查询。这很好,因为没有任何部分可以查询假设。

PS:正如其他答案所指出的那样,断言似乎是矛盾的。它们不清楚,查询也是如此。我怀疑"所有人都只为一家公司工作"意味着works中的人只为一家公司工作&#34 ;;否则直截了当的含义与允许人们出现在[employee]但未出现在works"中的假设相矛盾。 (因此失业)。我怀疑这个数据库中所有员工的姓名"表示数据库中employee",每个"中的人(例如employee)"。

要查询,您只需要了解行在何时以及何时不在表中(基本变量或查询结果)的状态。即如何知道表的含义又名谓词,这是一个填充(命名)空白语句,其中列是参数:

-- employee PERSONNAME lives on STREET in CITY

在工程和数学中使用名称和参数作为简写是传统的:

-- EMPLOYEE(PERSONNAME,STREET,CITY)

每个包含表格列的行通过为每个列值提供参数来生成一个名为 proposition 的语句:

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

制作 true 命题的行在表格中以及那些不在其中的行 。因此每个当前行都表明它的命题,每个缺席行都表明不是它的。 一个表保存使其谓词成为真命题的行。

关系运算符的设计使得结果的含义/谓词是其输入的含义/谓词的某种组合:

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。)

您的作业:

  

员工(PERSONNAME,STREET,CITY)
  作品(PERSONNAME,COMPANYNAME,SALARY)
  公司(COMPANYNAME,CITY)
  MANAGES(PERSONNAME,MANAGERNAME)

     

查找此数据库中不适用的所有员工的姓名   第一银行公司

我们希望行表能使某些含义/谓词成立。改写以获得我们想要的那个:

-- employee PERSONNAME does not work for FBC

我们必须根据我们给出的含义/谓词来表达这个含义/谓词:(我必须猜测那是什么,因为你没有给它们。)< / p>

-- 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]

对于使这个为真的行表,我们将逻辑运算符转换为关系运算符,并将基表谓词转换为名称:

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

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

约束是对可能出现的应用程序情况和相应数据库值的限制。他们是&#34;假设&#34;因为他们被认为是真实的。它们是业务规则(包括相关程序,物理定律和数学真理以及后果)。与对基数持有的内容或查询&#34;发现&#34;的描述一样,可以使用关于当前情况的自然语言和/或使用关于当前基表值的对应关系表达式将它们重新描述为含义/谓词。 (因为它们总是正确的,意义/谓词是语句/命题。所以它们的查询版本都有结果值,没有列和一行的表。所以他们不需要基表。)

查询不需要约束。它们总是评估为真实的语句,因此使用查询语句/命题将它们连接(AND)不会影响哪些行进入并保持不变基地(它们确实暗示了查询表达式在其组成基表方面的约束。此外,它们允许DBMS防止不可能的数据库值,并且它们帮助用户检查对基表含义/谓词的理解。)

给你这个作业的人可能不会理解这一点。你可以问他们:如果这些约束中的任何一个,那么查询表达式会有什么不同? (答案:不会。)

表的含义/谓词尚未给出。 也许断言是试图解释&#34;员工&#34;在查询中表示employeeworks的(ungiven)含义。

答案 1 :(得分:1)

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

  

假设所有人都只为一家公司工作......

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

  

...允许人们出现在数据库中(例如在员工中),但不会出现在作品中

因此,这告诉我们甚至可以让员工不与任何公司联系。

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