现有如下数据表: 1.客户信息表CustomerInfo,表结构如下: 客户姓名(customername),性别(sex)其中1代表男,0代表女,家庭住址(address),出生年月(birthdate),客户主键(customerid) 2.客户贷款详情信息表LoanDetailInfo,表结构如 i 贷款金额(loanamount),贷款期限(loantime),贷款用途(loanuse),贷款主键(loanid) 3.客户贷款关联表CustomerInfoAndLoanRelative, 表结构如下: 客户主键(customerid),客户姓名(customername),贷款主键(loanid),关联表主键(relativeid) 问题1: EXCEL导出客户的贷款信息,且贷款期限不大于10年。数据列如 下:客户姓名,性别(男、女),家庭住址,贷款金额,贷款用途问题2: 查询贷款次数大于1的客户信息,数据列如下: 姓名,家庭住址,出生年月问题3: 关联表的设计是否符合数据库三大范式?如何看待该设计?
时间: 2023-04-09 15:02:53 浏览: 253
问题1:可以回答这个问题。可以使用SQL语句查询客户信息表和客户贷款详情信息表,筛选出贷款期限不大于10年的客户贷款信息,然后将结果导出到EXCEL中。SQL语句如下:
SELECT ci.customername, ci.sex, ci.address, ldi.loanamount, ldi.loanuse
FROM CustomerInfo ci
INNER JOIN CustomerInfoAndLoanRelative cialr ON ci.customerid = cialr.customerid
INNER JOIN LoanDetailInfo ldi ON cialr.loanid = ldi.loanid
WHERE ldi.loantime <= 10
问题2:可以回答这个问题。可以使用SQL语句查询客户信息表和客户贷款关联表,统计每个客户的贷款次数,筛选出贷款次数大于1的客户信息。SQL语句如下:
SELECT ci.customername, ci.address, ci.birthdate
FROM CustomerInfo ci
INNER JOIN CustomerInfoAndLoanRelative cialr ON ci.customerid = cialr.customerid
GROUP BY ci.customerid, ci.customername, ci.address, ci.birthdate
HAVING COUNT(cialr.loanid) > 1
问题3:可以回答这个问题。根据给出的表结构,客户贷款关联表不符合第三范式,因为存在冗余数据。客户姓名和贷款主键在该表中都出现了,而这些信息已经在客户信息表和客户贷款详情信息表中出现过了。可以将客户姓名从该表中删除,只保留客户主键和贷款主键,这样就符合第三范式了。该设计存在一定的问题,需要进行优化。
阅读全文