如果将数据库比作一个存储东西的储物柜,表就像是储物柜上的各个抽屉,每个抽屉分门别类地存放了各种数据,在设计和规划数据库时,表的定义和规划往往相当重要,良好的表设计决定了程序人员编写程序的便利性与数据库的整体性能。现在讲理解Oracle中表的结构和设计的指南。
1、表和实体
曾经介绍过实体的概念。实体是对现实世界的抽象,在设计一个数据库时,首先需要考虑数据库需要涉及的实体。比如一个仓库数据库。如果进行现实世界的实体划分,可以具有如下实体:
- 仓库,存储仓库名称、位置。
- 仓库管理员,存储管理仓库的人员信息,比如工号、姓名、年龄等。
- 仓库类别,存储仓库的类型,比如是成品仓、半成品仓或原材料仓。
- 货位,存储仓库中物品的货位信息,比如货位位置、结构等。
在设计与规划表结构时,应该实现从现实世界的角度来分辨客观事物,将其划分为实体,然后规划出各个实体之间的关系,也就是说一般先绘制中实体关系(E-R)图,这个过程称为“数据库建模”。有了实体关系图后,数据库管理人员就可以进行表的创建,以仓库管理员中的仓管员领料为例,回执出了如图1.1的实体。
在图中矩形表示实体,椭圆形表示实体的属性,菱形表示实体与实体之间的关系。关系型数据库管理系统将实体转换为二维结构的二维表,表由表行和表列组成。表列带哦表实体中的属性,而表行则用来存储实体属性的具体的数值,一个数据库表的结构通常如表1.1所示。
可以看到,实体向表的转换过程就是对二维表的转换过程,整个表由表行和表列组成,表列存储了实体的属性,多个表列组成了表的实体存储结构,一般提及表的结构时,实际上就是之的表列的组成。表行根据表列的定义具体的存储数据,形成一个具体的表存储结构。
在将实体转化为表时,一般建议通过3个步骤进行:
(1)将实体中的属性定义成表列,根据属性的不同性质为表的列指定不同的数据库类型。比如姓名一般存储字符类型的数据,年龄一般存储的是数据类型的数据。
(2)根据E-R关系图中的实体属性和关系,为表添加约束。比如姓名是唯一的,name可以添加主键约束;如果必须要指定性别,可以添加非空约束;表与表之间的关系可以通过外键约束来进行指定。
(3)在定义了表和表列之后,根据表列添加表行,实现一个具有二维结构的数据表。
在设计表和表列时,必须要符合在之前介绍的数据库范式设计,因此表的设计也是一个返回迭代的过程,需要数据中的设计人员进行多次反复迭带来实现结构最优化的数据库。