SQL超级键和命令

SQL超级键和命令,sql,database-schema,Sql,Database Schema,我有一个问题需要修改,在account\u branch关系中识别两个超级键和一个候选键。我有一个想法,但如果有人有建议,我需要验证,到目前为止,我有候选密钥是帐户号码,超级密钥是帐户号码+分支机构名称,还有帐户号码+资产 另一个SQL命令问题是:查找每个城市的名称以及城市中有3个以上分支机构、每个分支机构的资产都超过1000000的长椅的数量。我已经尝试过使用分组的方法,这是正确的方法吗?不幸的是,我无法测试,因为这都是用笔和纸做的理论 我的回答是: SELECT branch_city, C

我有一个问题需要修改,在account\u branch关系中识别两个超级键和一个候选键。我有一个想法,但如果有人有建议,我需要验证,到目前为止,我有候选密钥是帐户号码,超级密钥是帐户号码+分支机构名称,还有帐户号码+资产

另一个SQL命令问题是:查找每个城市的名称以及城市中有3个以上分支机构、每个分支机构的资产都超过1000000的长椅的数量。我已经尝试过使用分组的方法,这是正确的方法吗?不幸的是,我无法测试,因为这都是用笔和纸做的理论

我的回答是:

SELECT branch_city, COUNT(branch_city)
FROM branch
WHERE assets > 1000000
GROUP BY branch_city
HAVING COUNT(branch_city) > 3

候选键是表中的一列或一组列,可以唯一标识任何数据库记录,而无需引用任何其他数据(无额外列)

account_number是account_branch表中的主键,因此它唯一地标识表中没有任何无关列的行,因此它符合候选键的条件

超级键是唯一标识关系数据库中任何行的列的组合(可能有不需要唯一性的额外列)

由于Account_number是Account_branch表中的主键,branch_name是分支表Account_number+branch_name中的外键,因此Account_number+branch_name将唯一标识Account_branch关系中的一行,因此它是一个超键。由于Account_number+branch_name已经标识了一个唯一的行,因此从branch添加任何其他列仍将标识一个唯一的记录,因此Account_number+branch_name+assets也是一个超级键

SELECT branch_city, COUNT(branch_city)
FROM branch
WHERE assets > 1000000
GROUP BY branch_city
HAVING COUNT(branch_city) > 3
是否返回所需的结果集:

SELECT branch_city
FROM branch
WHERE assets > 1000000
从资产大于1000000的所有行的分支返回结果集

GROUP BY branch_city 
告诉数据库按branch_city对结果集进行分组

添加聚合函数

计数(分支城市)
/聚合函数需要分组依据/

返回该结果集中每个城市的行数或出现次数

HAVING COUNT(branch_city) > 3

然后将结果调整为仅发生3次以上的城市

如果你展示你的尝试,或者至少在这种情况下展示你的想法,你可能会得到更好的回答,首先,如果你已经编写了一些伪sql,也许可以将其添加到你的问题中。我相信你的sql语句会在修改后返回你正在查找的结果集。我认为这个问题不值得否决票,也不应该被关闭。