数据库题目解析¶
题 1:转账失败如何处理¶
银行转账中账户 A 扣款成功、账户 B 入账失败,正确做法是回滚本次事务,撤销扣款。原因是扣款和入账必须满足事务原子性,不能只保留一半结果。
题 2:账户与理财产品如何建模¶
一个账户可买多只产品,一只产品也可被多个账户持有,这是 m:n 联系。应单独建立持有表,主键为 (account_id, product_id),不能只在账户表或产品表增加一个对方字段。
题 3:三级模式映像¶
改变数据库物理存储结构而柜员端程序无需修改,体现模式/内模式映像保证物理数据独立性。若改变逻辑表结构而外模式和应用不变,则是外模式/模式映像保证逻辑数据独立性。
题 4:提交后断电仍可恢复¶
最直接原因是重做日志遵循 WAL,在提交时已经先落盘,重启后可据此重放已提交事务。Undo Log 主要用于回滚未提交事务,通用查询日志与故障恢复不是同一机制。
题 5:自然连接结果列¶
customer(customer_id, name) 与 account(account_id, customer_id, balance) 自然连接后,结果列为 customer_id, name, account_id, balance。自然连接在同名列上连接,并去除重复连接列;等值连接则可能保留两份 customer_id。
具体数据库产品对事务日志、视图可更新性和索引使用的实现细节待核验。