原标题:Java中的简答题
Java Web 简答题:
1、数据库三范式是什么?
答:
第一范式(1NF):
字段具有原子性,不可再分。所有关系型数据库系统都满足第一范式)数据库表中的字段都是单一属性的,不可再分。例如,姓名字段,其中的姓和名必须作为一个整体,无法区分哪部分是姓,哪部分是名,如果要区分出姓和名,必须设计成两个独立的字段。
第二范式(2NF):
第二范式(2NF)是在第一范式(1NF)的基础上建立起来的,即满足第二范式(2NF)必须先满足第一范式(1NF)。要求数据库表中的每个实例或行必须可以被惟一地区分。通常需要为表加上一个列,以存储各个实例的惟一标识。这个惟一属性列被称为主关键字或主键。第二范式(2NF)要求实体的属性完全依赖于主关键字。
所谓完全依赖是指不能存在仅依赖主关键字一部分的属性,如果存在,那么这个属性和主关键字的这一部分应该分离出来形成一个新的实体,新实体与原实体之间是一对多的关系。为实现区分通常需要为表加上一个列,以存储各个实例的惟一标识。
简而言之,第二范式就是非主属性非部分依赖于主关键字。
第三范式的要求如下:
满足第三范式(3NF)必须先满足第二范式(2NF)。简而言之,第三范式(3NF)要求一个数据库表中不包含已在其它表中已包含的非主关键字信息。
所以第三范式具有如下特征:
1,每一列只有一个值 。
2,每一行都能区分。
3,每一个表都不包含其他表已经包含的非主关键字信息。
2、说出一些数据库优化方面的经验?
答:
用 PreparedStatement 一般来说比 Statement 性能高:一个 sql 发给服务器去执行,涉及步骤:语法检查、语义分析,编译,缓存
“inert into user values(1,1,1)”-→二进制
“inert into user values(2,2,2)”-→二进制
“inert into user values(?,?,?)”-→二进制
有外键约束会影响插入和删除性能,如果程序能够保证数据的完整性,那在设计数据库时就去掉外键。(比喻:就好比免检产品,就是为了提高效率,充分相信产品的制造商)(对于 hibernate 来说,就应该有一个变化:empleyee->Deptment 对象,现在设计时就成了 employee→deptid )
看 mysql 帮助文档子查询章节的最后部分,例如,根据扫描的原理,下面的子查询语句要比第二条关联查询的效率高:
1. select e.name,e.salary where e.managerid=(select id from employee where name='zxx');
2. select e.name,e.salary,m.name,m.salary from employees e,employees m where e.managerid = m.id and m.name='zxx';
表中允许适当冗余,譬如,主题帖的回复数量和最后回复时间等将姓名和密码单独从用户表中独立出来。这可以是非常好的一对一的案例哟!
sql 语句全部大写,特别是列名和表名都大写。特别是 sql 命令的缓存功能,更加需要统一大小写,sql 语句发给 oracle 服务器语法检查和编译成为内部指令→缓存和执行指令。根据缓存的特点,不要拼凑条件,而是用 PreparedStatment 还有索引对查询性能的改进也是值得关注的。返回搜狐,查看更多
责任编辑: