1、关系数据模型
- 关系模型三要素:关系数据结构,关系操纵,关系完整性;
- 关系:关系是笛卡尔积的有限子集,所以关系也是一个二维表,表的每行对应一个元组,表的每列对应一个域;
- D1xD2 = D2xD1,表的行和列不敏感;
- 非关系数据库实体用记录表达,关系用指针表达;
- 非关系型数据库直接用指针表达,查询速度较快,但是关系的调整非常麻烦,指针是写死的,关系型数据库的更新性能更好;
- 关系操作:增删改查;
- 关系完整性:实体完整性(每一个实例在这个实体中是可区别的,主键,以主键为键值在磁盘上用B树存储,如果没有设置主键则是按顺序存储)、参照完整性(外键)、自定义完整性(自行对属性设置约束,字段有效性约束和记录有效性,between、unique、not null、check);
- 外模式(用户,应用程序)->view
模式(逻辑)->table
内模式(存储)->index,tablespace(一片存储的空间),cluster(簇,哈希)平台间的主要差别
2、关系代数
- mysql不支持交运算
- 外连接=左连接U右连接,select * from R [left,right,outer] join S on R.B = S.B;
- 所有的dbs都不显示支持除法,但是可以用exist(集合)=true/false实现,例如:select * from S where exist(select * from C,SC where C.Cno=SC.Cno and SC.Sno=S.sno);
- select * from S where not exist (select * from C where not exist(select * from SC where SC.Sno=S.Sno and SC.Cno = C.Cno));
3、SQL
- DDL:Create(table,view,index)、Alter、Drop;
- DML:Insect、delete、update、select;
- DCL:grant、revoke;
- from后面跟关系:table,view,select查询结果;
- where是针对分组之前的选择,have是分组之后的选择;
- (1)select min(percent) from A == (2)select percent from A where percent <= All (select percent from A),(1)比(2)正常情况下慢,但是磁盘中可能存储有(1)的结果,但是这是牺牲insert和update的性能换的;
4、对象关系数据库
- 创建对象类型:CREATE TYPE typename AS object;
- ORACLE为每个行对象提供一个唯一标识;
- INSERT和UPDATE可以拥有同样的对象构造器;
- 关系型数据库面向更新,非关系型数据库面向查询;
- 用户自定义类型、引用类型、表类型、数组类型(Varray声明);
5、数据存储
- 尽量减少数据库的I/O次数,使数据存储在内存中;
- 一次磁盘页面的访问:寻道时间(磁盘臂移动到指定柱面的时间)、旋转时间(磁盘旋转到指定扇区的时间)和传输时间(读写磁盘页面数据的时间),磁盘访问时间主要是移动磁盘臂到指定位置所需时间;
- 块是最小的I/O操作单位,区间是连续的块,段是表的某个具体对象;
- 索引:如果一个表经常有写操作,建立索引会产生大量的时间消耗,并且由于B树的扩容方式,可能会使B树的层数很高,导致IO操作的时间比基表的IO操作时间更长;
- 建索引的过程是首先取出索引项,然后按键值排序,最后顺序加到B树叶子层中,建表的时候应该是先填充数据再建立索引,这样才能保证数据是连续分布的;
- 聚簇索引:基表也是按照B树存储,非聚簇索引:基表不按照B树存储;
- 数据仓库是面向查询的,数据库是面向更新的;
- 一个excel的sheet表中最多有80万条数据,超过这个数量的就会乱码;
6、数据管理
- 安全性:没有授权的用户不能操作数据库,包括身份验证(user)、存取控制(grant/revoke)、视图、加密和审计;
- 完整性:被授权的用户在数据库更新失败时保持数据的完整性,包括:实体完整性(primary key)、参照完整性(foreign key)、自定义完整性(check、not null、between、unique);列级约束和表级约束:应用程序、触发器、create table;
- 一致性:事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态;
- 可靠性:在规格时间间隔内和规定条件下,系统或部件执行所要求功能的能力;
- 元数据(数据字典/系统字典):数据库中的所有表、表中的字段以及相关的约束所形成的这一个整体;