gpt4 book ai didi

relational-algebra - 银行业务情景的关系代数

转载 作者:行者123 更新时间:2023-12-04 07:56:30 26 4
gpt4 key购买 nike

我不知道如何解决关系代数问题。


Deposit (Branch, Acc-No, Cust-Name, Balance)
Loan (Branch, Loan-No, Cust-Name, Balance)
Branch (Branch, Assets, Branch-County)
Customer (Cust-Name, Cust-County, Branch)


产生一个关系,以显示所有分支机构,客户名称,余额和帐号
贷款大于2000.00英镑的客户以及所有具有存款帐户的客户
余额少于£150.00。所有客户都应在Romford分公司。


到目前为止,这是我想出的。这是正确的吗?

π Branch, Acc-No, Cust-Name, Balance (
σ Loan.Balance > 2000 ∧ branch = 'Romford' (Loan)
∪ σ Deposit.Balance < 150 ∧ branch = 'Romford' (Customer ∩ Deposit)
)


我的老师给了这个,但后来说错了:


π Branch, Cust-Name, Balance, Acc-No (
σ Balance < 150 ∧ branch = 'Romford' (Deposit)

π Branch, Cust-Name, Balance, Loan-No
σ Balance > 2000 ∧ branch = 'Romford' (Loan)
)

最佳答案

给定声明。每个表/关系都有一个由列/属性参数化的语句。 (其“特征谓词”。)使语句为真的行/元组进入表/关系。首先找到给定表/关系的语句:

// customer [Cust-Name] has £[Balance] in account [Acc-No] at branch [Branch]
Deposit (Branch, Acc-No, Cust-Name, Balance)

// customer [Cust-Name] loan [Loan-No] balance is £[Balance] at branch [Branch]
Loan(Branch, Loan-No, Cust-Name, Balance)

. . .


请注意,表/关系定义是该语句的简写。

查询语句。现在,将这些给定的语句放在一起以获得仅我们要满足的行的语句。使用AND,OR,AND NOT和AND条件。保留或删除名称。如果需要,请使用一个新名称。

我将做一个类似您的作业一部分的示例:

-- informal style version
branch, customer name, account balance and account number for
customers that have a loan bigger than £2000
at Romford branch


我想要那些行。所以我想要一个声明,正是这些行是正确的。因此,我所做的陈述越来越接近我想要的陈述。所以我开始:

-- columns/attributes Cust-Name, Loan-No, Balance, Branch
customer [Cust-Name] loan [Loan-No] balance is £[Balance] at branch [Branch]


现在,我想为贷方余额使用一个不同的名称,因为我最终希望仅对帐户余额使用余额:

-- columns/attributes Cust-Name, Loan-No, Loan-Balance, Branch
customer [Cust-Name] loan [Loan-No] balance is £[Loan-Balance] at branch [Branch]


现在我也想要帐户余额:

-- columns/attributes Cust-Name, Loan-No, Loan-Balance, Branch, Balance, Acc-No
customer [Cust-Name] loan [Loan-No] balance is £[Loan-Balance] at branch [Branch]
AND customer [Cust-Name] has £[Balance] in account [Acc-No] at branch [Branch]


如果我只使用一个名称Balance,那么它就必须是贷款余额和帐户余额。行/元组本来是针对贷款余额与帐户余额相同的客户的。余额列/属性就是这些值。

现在我要限制余额和分支:

-- columns/attributes Cust-Name, Loan-No, Loan-Balance, Branch, Balance, Acc-No
customer [Cust-Name] loan [Loan-No] balance is £[Loan-Balance] at branch [Branch]
AND customer [Cust-Name] has £[Balance] in account [Acc-No] at branch [Branch]
AND [Loan-Balance]>2000 AND [Branch]='Romford'


现在我只想要一些列/属性:

-- statement style version
-- columns/attributes Cust-Name, Branch, Balance, Acc-No
Keeping Branch, Cust-Name, Balance, Acc-No: (
customer [Cust-Name] loan [Loan-No] balance is £[Loan-Balance] at branch [Branch]
AND customer [Cust-Name] has £[Balance] in account [Acc-No] at branch [Branch]
AND [Loan-Balance]>2000 AND [Branch]='Romford')


这是示例行的声明。

您可以使用“保留名称”或“删除名称”。(在逻辑上,“删除”称为FOR SOME或THERE EXISTS。因为我们希望其中的语句对于某个名称的FOR SOME值是正确的,即我们希望该声明的值存在,以便使该语句为真。)

查询速记。现在,将每个语句替换为其速记。

在我的示例中,我得到:

-- shorthand style version
-- columns/attributes Cust-Name, Branch, Balance, Acc-No
Keeping Branch, Cust-Name, Balance, Acc-No: (
Loan (Branch, Loan-No, Cust-Name, Loan-Balance)
AND Deposit (Branch, Acc-No, Cust-Name, Balance)
AND Loan-Balance>2000 AND Branch='Romford')


(请注意,在问题的下半部分尝试中,您不需要客户。因为您不需要它的声明。因为您可以声明想要的行的所有内容而无需它。因此,它只会添加库斯特县,最终不使用就扔掉。)

查询代数现在获取代数替换:


每个语句的表/关系
表/关系语句的每个AND(以⋈(自然连接)表示)
表/关系语句的每个OR(必须具有相同的列/属性),按∪(联合)
语句的每个AND NOT(必须具有相同的列/属性),以\(不同)表示
每个AND条件(通过σ条件)
每个保留名称按π名称保留(投影)(以及丢弃π名称以保留)
给定语句中的每个列/属性都用ρ(重命名)重命名。


∩(交集)和x(乘积)是special的特例(∩表示相同列/属性的双方,而x表示不共享列/属性)。

请记住,表/关系语句和表/关系引入了列/属性名称,但保留/删除和π则将其删除。请记住,给定语句中的重命名将变成ρ。

我得到:

-- algebra style version
π Branch, Cust-Name, Balance, Acc-No
σ Branch='Romford' σ Loan-Balance>2000
((ρ Loan-Balance/Balance Loan) ⋈ Deposit)


(我不知道您应该使用哪种特殊的代数符号。了解其关于点名以及使用等值连接与自然连接的规则。同样,我也不知道它允许什么样的σ条件。)

根据例子。因此,请对行进行描述并编写一条语句,使这些行完全正确。然后转换为给定的语句。然后用简写代替。然后用代数代替。


您给出的陈述是什么?
他们的速记是什么?
他们的表/关系名称是什么?
他们的栏目/属性是什么?
您想要的行/元组的列/属性是什么?
什么是清晰,简单,自然的语言陈述,即您想要的行为真,但您不想要的行却为真?但是要避免代词,因为代词不会翻译成代数。只需重用列/属性名称。如果您需要一个新名称,那么只需发明一个名称并发表声明。
给定的陈述中有什么是整体陈述的一部分?
什么是速记版本?
什么是代数版本?
您是否在给定声明中更改了名称?然后通过ρ在其表/关系中对其进行重命名。


继续进行总体陈述的另一部分。


您想要给定语句的组合吗?然后使用AND,OR,AND NOT和Keeping / Dropping。
您是否不想知道您提到的列/属性的值?然后使用“保留/删除”(然后是π)。
你提到太多名字了吗?然后通过π(以及相应的“保留/删除”)保留所需的内容。


继续。

您将必须找到正确的顺序才能说出话来。尝试其他顺序。因为您必须通过语句/表的AND NOT或条件来使用NOT。语句/表的AND和AND NOT的每一侧必须具有相同的列/属性。并且必须在与之相符的语句中提及处于条件中的名称。

你的问题。我花了一段时间来解析并纠正您设定的目标:


显示所有分支机构,客户名称,余额和帐号
贷款额大于2000英镑的客户以及所有客户
存款帐户余额少于£150英镑的帐户。所有这些
客户应在Romford分行。


这是:


显示分支机构,客户名称,帐户余额和帐户号(所有贷款额大于2000英镑的客户以及存款余额小于150英镑的所有客户)。所有这些客户都应该在Romford Branch。


(我必须添加一个词来理解这一点。但这令人难以置信,它的意思是“分支机构,客户名称,余额和编号[标为什么?],其中余额和编号为> 2000的贷款或余额和编号是帐户余额<150“的客户的帐户余额和编号。)

中间有一个AND,因此您可能会认为它将给出一个代数⋈(自然连接)或∩(交集)。但是,您必须仅根据给定的语句和条件来描述列/属性。事实证明,AND变成OR。而且事实证明,我们必须添加一个额外的存款对帐单。这样我们就可以获得贷款客户的帐户信息。请记住,您必须在OR(或AND NOT)的两边具有相同的列/属性。

第一个“分支机构,客户名称,帐户余额,帐户号”为“所有贷款额大于2000英镑的客户”。这看起来像我们上面所做的。但是这次让我们以后限制分支:

-- statement A
-- columns/attributes Cust-Name, Branch, Balance, Acc-No
Keeping Branch, Cust-Name, Balance, Acc-No: (
customer [Cust-Name] loan [Loan-No] balance is £[Loan-Balance] at branch [Branch]
AND customer [Cust-Name] has £[Balance] in account [Acc-No] at branch [Branch]
AND [Loan-Balance]>2000)


现在“分支机构,客户名称,帐户余额,帐户编号”“所有存款帐户余额少于£150的客户”。这比以前更简单,所以希望您能直接理解它:

-- statement B
-- columns/attributes Cust-Name, Branch, Balance, Acc-No
customer [Cust-Name] has £[Balance] in account [Acc-No] at branch [Branch]
AND [Balance]<150


现在我们想要使语句“ statement A OR statement B”为真的行:

-- columns/attributes Cust-Name, Branch, Balance, Acc-No
Keeping Branch, Cust-Name, Balance, Acc-No: (
customer [Cust-Name] loan [Loan-No] balance is £[Loan-Balance] at branch [Branch]
AND customer [Cust-Name] has £[Balance] in account [Acc-No] at branch [Branch]
AND [Loan-Balance]>2000)
OR customer [Cust-Name] has £[Balance] in account [Acc-No] at branch [Branch]
AND [Balance]<150


现在我们限制分支:

-- statement for goal
-- columns/attributes Cust-Name, Branch, Balance, Acc-No
( Keeping Branch, Cust-Name, Balance, Acc-No: (
customer [Cust-Name] loan [Loan-No] balance is £[Loan-Balance] at branch [Branch]
AND customer [Cust-Name] has £[Balance] in account [Acc-No] at branch [Branch]
AND [Loan-Balance]>2000)
OR customer [Cust-Name] has £[Balance] in account [Acc-No] at branch [Branch]
AND [Balance]<150
)
AND [Branch]='Romford'


这是通缉行的声明。现在我们用速记代替:

-- shorthand for goal
-- columns/attributes Cust-Name, Branch, Balance, Acc-No
( Keeping Branch, Cust-Name, Balance, Acc-No: (
Loan (Branch, Loan-No, Cust-Name, Loan-Balance)
AND Deposit (Branch, Acc-No, Cust-Name, Balance)
AND [Loan-Balance]>2000)
OR Deposit (Branch, Acc-No, Cust-Name, Balance)
AND [Balance]<150
)
AND [Branch]='Romford'


一个答案。现在我们用代数代替:

-- algebra style version
σ Branch='Romford'
( π Branch, Cust-Name, Balance, Acc-No
σ Loan-Balance>2000
((ρ Loan-Balance/Balance Loan) ⋈ Deposit)
∪ σ Balance<150 Deposit))


PS:代数=无循环计算关系代数的全部要点是语句完全对应于代数表达式:语句对应于表/关系,(语句的)逻辑运算符对应于代数运算符。但是代数版本是可以自动计算的无环描述。使语句为真的行是其代数形式的值。我们为table / relation语句提供行,并且代数为我们根据它们组合的任何其他语句计算行。

关于relational-algebra - 银行业务情景的关系代数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24423150/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com