常用数据类型
1. 数据类型
-
number():数字类型, 最长x位,y位小数;
-
varchar2(max_length):变长字符串,这个参数的上限是32767字节;
- 声音方式如下varchar2(L),L为字符长度,没有缺省值,作为变量最大32767字节。
-
char(max_length):定长字符串,最大2000字节;
-
Date:日期类型(精确到秒);
-
Timestamp:时间戳(精确到微妙);
-
long:长字符串,最长2GB
2. 了解类型:
- CLOB:最大长度4G->大对象很少使用:如果存在大对象,一般的解决方案存入文件地址(地址为程序所在应用服务器的相对路径);
- BLOG:存二进制文件。
数据库的对象:
| 对象名称 | 描述 |
|---|---|
| 表 | 基本的数据存储兑现,以行和列的形式存在,列也就是字段,行也就是记录 |
| 约束 | 执行数据校验,保证数据的完整性 |
| 视图 | 一个表或者多个表的逻辑显示 |
| 索引 | 用于提高查询性能 |
| Sequence | 自增序列 |
1. 数据库对象的命名规则:
- 必须以字母开头;
- 可包括数字和三个特殊字符(#、_、$);
- 不要使用oracle的保留字;
- 同一用户下的对象不能同名;
2. 表结构的修改:
在表建立后,后期需要修改的时候:
alter table 表名 add 列名;
1. 约束 constraint:
- 当我们创建表的时候,同时可以指定所插入数据的一些规则,比如说某个字段不能为空值或者不能等于0等等。
- oracle支持5类约束:
- not null:非空:确保字段不能为空;
- unique key:唯一键:确保所在字段或者字段组合不出现重复;
- primary key:主键;
- 主键约束是数据库中最重要的一种约束。在关系中,主键值不可为空,也不允许为重复,即关系要满足实体完整规则。
- foreign key:外键:
- 外键是表中的一个列,其值必须在另一个表的主键或者唯一键中列出;
- 作为主键的表称为“主表”,作为外键的关系称为“依赖表”。
- 对于主表的删除和修改主键值的操作,会对依赖关系产生影响,以删除为列:当要删除主表的某个记录,即删除一个主键值,那么对依赖的影响可采取下列三种做法:
- restrict方式:只有当依赖表中没有一个外键值与要删除的主表中主键值相对应时,才可执行删除操作;
- cascade方式:将依赖表中所有外键值与主表中要删除的主键值相对应的记录一起删除;
- set null方式:将依赖表中所有与主表中被删除的主键相对应的外键值设为空值。
- 注意:
-
foreign key (deptno) references dept(deptno) [on delete [cascade|set null]];如省略on短语,缺省为第一种处理方式。
-
- check:自定义检查约束:用于对一个属性的值加以限制。
2. 约束的添加和撤销:
-
增加或删除约束,但不能直接修改:
alter table tablename
-
增加:
-
add constraint con_name unique(col);
-
-
删除:
- drop constrain con_name [casecade];
3. 索引:
索引是为了加快数据的搜索速度而设立的。索引方案(schema)中的一个数据对象,与表独立存放;索引文件是存放到磁盘上的一个块空间内4K,内存通过访问这4K空间或者4K的倍数,从而达到访问数据对象的目的。
- 索引的作用:在数据库中用来加速对表的查询,通过使用快速路径访问的方法,快速定位数据,减少了磁盘的I/O;
- Sql中的索引是非显示索引,也就是在索引创建后,在用户撤销它之前不会再用到该索引的名字,但是索引在用户查询时会自动起作用。
- 缩影的创建分两种情况:
- 自动:当在表上定义一个primary key 或者unique 约束条件时,oracle数据库自动创建一个对应的唯一索引;
- 手动:用户可以创建索引以加速查询。
- 开发中索引的要点:
- 索引改善检索操作的性能,但降低数据插入,修改和删除的性能。在执行这些操作的时候,DBMS必须动态地更新索引;
- 索引数据可能要占用大量的存储空间;
- 并非所有的数据都适合于索引。唯一性不好的数据(如省)从索引得到的好处不必具有更多可能值的数据(如姓名)从索引得到的好处多;
- 索引用于数据过滤和数据排序。如果你经常以某种特定的顺序排序数据,则该数据可能使索引的备选。
- 可以在索引中定义多个列(如省城市),这样的索引只在以省加城市的顺序排序时有用,如果想按城市排序,则这种缩影没有用处。
- 索引的创建:
-
在一列或者多列上创建索引:
-
create INDEX index on table (column[, column]);
-
-
通过drop index命令删掉一个索引:
-
drop INDEX index;
-
-
数据库设计三范式
1. 第一范式(确保每列保持原子性):
-
第一范式是最基本的范式。如果数据库表中的所有字段值都是不可分解的原子值,就说明该数据库表满足了第一范式。列不可分。
-
第一范式的合理遵循需要根据系统的实际需求来定。比如某些数据库系统中需要用到“地址”这个属性,本来直接将“地址”这个属性设计成一个数据库表的字段就行,但是如果经常访问“地址”属性中的“城市部分”,那么就要将“地址”这个属性重新拆分为“省份”、”城市“、详细地址等多个部分进行存储,这样在对地址中某一部分操作的时候非常方便。这样的设计才满足了数据库的第一范式。
如图
2. 第二范式(确保表中的每列都和主键相关)
-
第二范式在第一范式的基础上更进一层。第二范式需要确保数据库中的每一列都和主键相关,而不能只与主键的某一部分相关(主要针对联合主键而言)。也就是说在一个数据库表中,一个表中只能保存一种数据,不可以把多种数据保存在同一张数据库表中。
-
比如要设计一个订单信息表,因为订单中可能会有多种商品,所以要将订单编号和商品编号作为数据库表的联合主键。
如图:
3. 第三范式(3NF):
传递依赖:必须先满足第二范式(2NF)。简而言之,第三范式(3NF)要求一个数据库表中不包含其他表中已包含的非主关键字信息。例如,存在一个部门信息表,其中每个部门有部门编号、部门名称、部门简介等信息;那么在图中的员工信息表中列出部门编号就不能再将部门名称、部门简介等与部门有关的信息再加入员工信息表中。如果不存在部门信息表,则根据第三范式(3NF)也应该构建它,否则就会有大量的数据冗余。简而言之,第三范式就是属性不依赖于其他非主属性
如图:
- 表依赖关系:
- 一对一;
- 一对多;
- 多对多。