员工(PERSONNAME,STREET,CITY)
WORKS(PERSONNAME,COMPANYNAME,SALARY)
公司(COMPANYNAME,CITY)
MANAGES(PERSONNAME,MANAGERNAME)
查找此数据库中不适用于First Bank Corporation的所有员工的姓名(假设所有人员只为一家公司工作,并且允许人员出现在数据库中(例如在员工中)但未出现在工作中)
这里我不理解假设部分。它究竟意味着什么?
答案 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;在查询中表示employee
和works
的(ungiven)含义。
答案 1 :(得分:1)
正如@wildplasser所指出的那样:假设的第一部分
假设所有人都只为一家公司工作......
声明员工和公司之间存在完全一个关系的情况。这意味着不允许将员工与任何公司相关联的数据记录。这就是假设的第二部分开始的地方
...允许人们出现在数据库中(例如在员工中),但不会出现在作品中
因此,这告诉我们甚至可以让员工不与任何公司联系。
对我来说,我现在得出结论,该问题要求公司和员工实体之间的零或一个关系。