数据库知识

这段时间跳槽的人特别多, 程序员们又纷纷加入了年后面试寻求涨工资, 新机会的大军, 求职就意味着面试. 而对于java程序员来说, 数据库是面试必问的, 再次总结下数据库的面试常见问题:

1. 数据库的范式

范式:英文名称是 Normal Form,它是英国人 E.F.Codd(关系数据库的老祖宗)在上个世纪70年代提出关系数据库模型后总结出来的,范式是关系数据库理论的基础,也是我们在设计数据库结构过程中所要遵循的规则和指导方法。目前有迹可寻的共有8种范式,依次是:1NF,2NF,3NF,BCNF,4NF,5NF,DKNF,6NF。通常所用到的只是前三个范式,即:第一范式(1NF),第二范式(2NF),第三范式(3NF)。下面就简单介绍下这三个范式。

第一范式(1NF):强调的是列的原子性,即列不能够再分成其他几列, 属性不可分。 
考虑这样一个表:【联系人】(姓名,性别,电话) 
如果在实际场景中,一个联系人有家庭电话和公司电话,那么这种表结构设计就没有达到 1NF。要符合 1NF 我们只需把列(电话)拆分,即:【联系人】(姓名,性别,家庭电话,公司电话)。1NF 很好辨别,但是 2NF 和 3NF 就容易搞混淆。 
   ◆ 第二范式(2NF):首先是 1NF,另外包含两部分内容,一是表必须有一个主键;二是没有包含在主键中的列必须完全依赖于主键,而不能只依赖于主键的一部分。即有主键,非主键字段依赖主键 .
考虑一个订单明细表:【OrderDetail】(OrderID,ProductID,UnitPrice,Discount,Quantity,ProductName)。 
因为我们知道在一个订单中可以订购多种产品,所以单单一个 OrderID 是不足以成为主键的,主键应该是(OrderID,ProductID)。显而易见 Discount(折扣),Quantity(数量)完全依赖(取决)于主键(OderID,ProductID),而 UnitPrice,ProductName 只依赖于 ProductID。所以 OrderDetail 表不符合 2NF。不符合 2NF 的设计容易产生冗余数据。 
可以把【OrderDetail】表拆分为【OrderDetail】(OrderID,ProductID,Discount,Quantity)和【Product】(ProductID,UnitPrice,ProductName)来消除原订单表中UnitPrice,ProductName多次重复的情况。 
   ◆ 第三范式(3NF):首先是 2NF,另外非主键列必须直接依赖于主键,不能存在传递依赖。即不能存在:非主键列 A 依赖于非主键列 B,非主键列 B 依赖于主键的情况。 非主键字段不能互相依赖.
考虑一个订单表【Order】(OrderID,OrderDate,CustomerID,CustomerName,CustomerAddr,CustomerCity)主键是(OrderID)。 
其中 OrderDate,CustomerID,CustomerName,CustomerAddr,CustomerCity 等非主键列都完全依赖于主键(OrderID),所以符合 2NF。不过问题是 CustomerName,CustomerAddr,CustomerCity 直接依赖的是 CustomerID(非主键列),而不是直接依赖于主键,它是通过传递才依赖于主键,所以不符合 3NF。 
通过拆分【Order】为【Order】(OrderID,OrderDate,CustomerID)和【Customer】(CustomerID,CustomerName,CustomerAddr,CustomerCity)从而达到 3NF。 
第二范式(2NF)和第三范式(3NF)的概念很容易混淆,区分它们的关键点在于,2NF:非主键列是否完全依赖于主键,还是依赖于主键的一部分;3NF:非主键列是直接依赖于主键,还是直接依赖于非主键列。

2. truncate table 与delete 整个表的所有记录时的区别

关于 Oracle 的高水平线

high water mark 故名思义为高水平线 , 一般是相对一个表而言的 , 当一个表有数据不断的插入时 ,high water mark 值不断增高 , 对那些全表扫描的 select 查询是以 high water mark 为终点的 , 虽然表中可能只有一行记录 . 它是表的空间曾经扩充到的值 .

(1)、TRUNCATE在各种表上无论是大的还是小的都非常快。如果有ROLLBACK命令Delete将被撤销,而TRUNCATE则不会被撤销。
   (2)、TRUNCATE是一个DDL语言,向其他所有的DDL语言一样,他将被隐式提交,不能对TRUNCATE使用ROLLBACK命令。Delete是一个DML语言.
   (3)、TRUNCATE将重新设置高水平线和所有的索引。在对整个表和索引进行完全浏览时,经过TRUNCATE操作后的表比Delete操作后的表要快得多。
   (4)、TRUNCATE不能触发任何Delete触发器。
   (5)、当表被清空后表和表的索引讲重新设置成初始大小,而delete则不能。
   (6)、不能清空父表。

在oracle里,使用delete删除数据以后,数据库的存储容量不会减少; 使用delete删除某个表的数据以后,查询这张表的速度和删除之前一样,不会发生变化。

因为oralce有一个HWM高水位,它是oracle的一个表使用空间最高水位线。当插入了数据以后,高水位线就会上涨,但是如果你采用delete语句删除数据的话,数据虽然被删除了,但是高水位线却没有降低,还是你刚才删除数据以前那么高的水位。除非使用truncate删除数据。这条高水位线在日常的增删操作中只会上涨,不会下跌,所以数据库容量也只会上升,不会下降。而使用select语句查询数据时,数据库会扫描高水位线以下的数据块,因为高水位线没有变化,所以扫描的时间不会减少,所以才会出现使用delete删除数据以后,查询的速度还是和delete以前一样。

时间: 2024-12-17 05:14:15

数据库知识的相关文章

数据库知识整理<二>

又继续写的博客,希望自己能坚持每天写博客.分享自己的点滴,对自己成长有帮助.今天下午高强度打了三个小时篮球,小腿都抽筋了.很爽,失落的心情似乎变得开明了一些.想到了一句话:“像SB式的坚持总会有好的收获”,因为坚定了目标,不达目标不罢休.其他的就没什么了.好吧,不多说这些了.继续数据库知识总结吧. 二,管理数据库和表: 2.1管理数据库: 创建和使用数据库: 创建数据库的SQL语句:create database 数据库名: 需要注意的是:数据库名在服务器中必须是唯一的并且遵循合法的标识符规则:

数据库知识整理

关系型数据库知识整理: 一,关系型数据库管理系统简介: 1.1使用数据库的原因: 降低存储数据的冗余度 提高数据的一致性 可以建立数据库所遵循的标准 储存数据可以共享 便于维护数据的完整性 能够实现数据的安全性 1.2基本概念: 对于任何数据库来说,表之间的关联关系存在三种基本的关系类型:一对一,一对多,多对多仅此三种. 目前流行的关系型数据库服务器管理系统有:微软-MS SQL Server.甲骨文-Oracle.IBM-DB2.开源的MySql和PostgreSQL等.(在面试中有被问到过)

数据库知识整理<八>

联接: 8.1理解简单的单联接: 基本上联接的结果是每个集合的笛卡尔积.例如:两个集合{a,b,c}和{a,b}的笛卡尔积是如下的成对集合:{(a,a),(a,b),(b,a),(b,b),(c,a),(c,b)}. select 表1.列1,表1.列2,表2.列3 from 表1 cross join 表2: 这种类型的联接称为交叉联接,或者笛卡尔积.在mysql中查询语句就是这样写的. 8.1.1使用两表相等联接: 两个表的行相连接的最常用的方法是通过一个相等联接.相等联接基于每行中的一个列

数据库知识整理<五>

简单的数据查询: 5.1查询的基本结构: Sql语句:select [distinct] (* | column [alias],...) from table [where condition] [order bycolumn]; 5.2投影操作: 投影操作是指在Sql查询中,使用select子句,选择将对表中的那些列进行操作,这些列将出现在结果中. 基本的Sql语句的查询:select 列名列表 from 表名; 表名前缀:select 表名.列明 from 表名;如 select stud

数据库知识回顾

下载地址 http://www.newasp.net/soft/30867.html#downloads win7 64位 .sqlserver2008 安装 http://www.cnblogs.com/lyhabc/articles/3536047.html 打开 登陆 超级用户:sa 密码:123456 下面这张图是数据库分离用的. 5.数据库知识 xml数据库 查询效率高 完整性约束:对数据的约束. 用户定义完整性:男即男,女即女. 参照完整性:有所参照.关系与关系间的引用 实体完整性:

Mysql数据库知识总结(看资料总结出来的)

毕业到现在算起来做了3年多服务端开发了,毕业之后很少有时间想在学校一样可以抽出一些空余的时间对知识进行一个总结,到现在也是时候对一些关键的知识一个总结,今天趁着时间比较多,先来对用了3年多的开源关系型数据库mysql进行一下总结,整理了一下知识点可以分为以下几点进行: 一.基础知识 二.SQL优化与索引 三.数据库规范建议 四.数据库设计 五.数据库架构 一.基础知识 知识点主要包括:数据类型 常用函数 字符集 事务隔离级别 锁机制 (1).数据类型 数值类型 -- TINYINT.SMALLI

Sybase数据库技术,数据库恢复---分享Sybase数据库知识(博客文章索引@51cto)

Sybase数据库技术,数据库恢复分享Sybase数据库知识 博客文章列表,更新时间:2014-12-14 Sybase数据库技术,数据库恢复 站点地图 最新文章 ASE使用with ignore_dup_row删除重复数据  (评论 0   阅读 50) ASE 16静默方式安装并创建服务器  (评论 0   阅读 80) ASE执行sp_remotesql报错:Msg 11224, Level 16, State 2  (评论 0   阅读 72) Sybase支持浪潮天梭K1系统  (评论

MongDB篇,第一章:数据库知识1

MongDB    数据库知识1 程序 =  数据结构 + 算法 数据存储阶段 1,文件管理阶段 (.txt .doc .xls) 优点: 数据可以长期保存:可以存储大量的数据:使用简单     缺点: 数据的一致性差:数据的查找修改不方便:数据的冗余性大 2,数据库存储阶段 优点 : 数据组织结构化,降低了冗余:方便扩展:方便程序调用,做自动化的处理     缺点 : 数据库使用往往需要特定的语句或者命令进行操 作,相对比较复杂 几个概念 数据 :能够输入到计算机中并被识别处理的信息的集合:

表哥的Access入门++以Excel视角快速学习数据库知识pdf高清版免费下载

下载地址:网盘下载 备用地址:网盘下载 编辑推荐Access作为一款流行的小型数据库软件,相对于其他数据库软件产品,易学易用.可视操作.灵活便捷,**程度上避免了用户的编程需求.本书将以一个小饭馆的管理软件为例,从头到尾介绍整个软件的设计过程,在设计过程中,只对案例中用到的设置选项进行详细的介绍,这样可以避免分散我们的思路,减少学习负担. 内容简介本书根据网络畅销书<“表”哥的Access入门>改编,该书以案例教学的方式,通过一个简单的小饭馆数据库管理程序的开发过程,介绍如何规范Access数

SQL数据库知识二(Day 25)

又到了总结知识的时候了,今天主要把SQL数据库给简单的学完了,明天开始就要开始学ADO.NET的知识了.好了,话不多说,还是看一下今天都学了哪些内容. 1  字符串类型的知识点 --类型的使用 --截取字符串 select 姓名,substring(姓名,1,1) as 姓氏,substring(姓名,2,2)as 名字 from 职工 --substring(express,start,length) --express:字符串 start:整数 制定字符串分割的开始位置 length: 分割