buguge - Keep it simple,stupid

知识就是力量,但更重要的,是运用知识的能力why buguge?

导航

千人千面:来看看这道简单的SQL面试题——设计一个学生成绩表

今早上班后清理工位时,发现这张废纸,记录一下。

 

下面是这个简单的数据库应用面试题

1、设计一个学生成绩表 (DDL 或者是逻辑结构)

2、用一条 SQ语句 查询总成绩大于270分的学生

3、用一条SQL语句 查询出每门课都大于80分的学生

 

坦白说,这个再常见不过的题并不难,甚至经常作为大学练习题。

表设计有2个方案:1. 横向存储的方式:学生+课程+分数;2.纵向按列存储的方式:学生+课程A+课程B+...+课程N

 

细节来说
首先,如何来标记学生呢,看这道题,并没什么要求,所以,我们用学生姓名来标记。当然, 用学号也行。
其次,分数字段的类型,如果没有小数,用int即可,如果有小数,可以用decimal(5,2)。
再次,选择方案1)与方案2)的两个设计方案的依据。如果基于课程会有变化这一点来考虑,则采用方案1);如果基于课程比较固定是那几科,则采用方案2)倒也不错。

 

下面这位候选人小伙做的不错。

 

 

在面试中,的确发现了千人千面。

针对本文开头的截图,我记得问那位候选人为什么要这么设计表,他的回答竟然是————为了能写出来后面的2个sql。

在问到分数字段的类型时,有同学上来就表示:用bigint,这样不会出现越界的bug。

有同学设计的表结构是:学生id+分数。声称这个表存学生的总分就行了。我暗自反思:是这道题描述得有歧义吗?

 

我曾面试过一个对接过京东支付的小伙, 他们的程序在接收到支付结果回调时,除了校验签名外,还会验证金额是否一致。直觉告诉我,我遇到了靠谱的程序员。连忙追问为什么验证金额,小伙没底气了,表示这是前人这么写的,自己也觉得画蛇添足,组内几个人沟通后准备去掉。害!最后,送他走的时候,我叮嘱他,不要去掉金额的验证,并阐述了理由。支付结果回调通知的安全控制(嘘,一般人我不告诉他~~) 

 

posted on 2023-08-24 09:46  buguge  阅读(61)  评论(0编辑  收藏  举报