数据库建模基础

    在整理数据库建模基础知识前,我们先来看一个实际生活中的例子:统计各班学生各科成绩。
    在实际生活中,我们会建立拥有如下字段的表格:

 

学生班级科目成绩


    这样建表虽然各类信息可以一目了然,但并不适合用于数据库的建表。因为这样存在信息冗余或二义性等问题,造成增加、删除、修改异常。
    在数据库建模时,通常将上表分为四个表,分别为:

 

学生表t_stu  
学号姓名性别班级编号
sidsnamesex cid

 

 

班级表t_class
班级编号 班级名称
cidcname

 

 

科目表t_subject
科目编号科目名称
subidsubname

 

 

成绩表t_score   
自动编号学号科目编号成绩考试日期
score_id sidsubidscoredt_exam

    在后面,我们将基于该例进行各知识点的说明与讨论。
实体
    上例中,有四种实体,分别是:学生实体、班级实体、科目实体及成绩实体。
    实体分为了强实体和弱实体。强实体是指不依赖其它实体,可以独立存在的实体;而弱实体则要依赖于其他实体,不能独自存在。前例中,学生实体、班级实体、科目实体均为强实体;成绩实体是弱实体。
    寻找实体有一个限制规则——“范式”。理论上有五个范式。但在实际运用中,只遵循了前三个。其中第三范式可以不满足,而第一范式、第二范式必须满足的。
    第一范式(1NF):所有行都不能重复,所有列必须有原子性。其中表达了两层含义:
    所有的行必须是不同的。
    所有的列不可再分,即具有原子性。也就是说,一个字段只能有一个值代表一个含义。
    第二范式(2NF):非主键列必须依赖于主键列。
    主键代表一个实体,实体是否一定具有非主键定义的属性,如果有,就表示“依赖”存在;如果没有,就不存在“依赖”。
    一个属性必须是一个对象的固有的属性。
    第三范式(3NF):非主键列之间必须相互独立。
实体关系
    关系存在于实体与实体之间,它是双向的。注意,只有实体与实体之间才有关系,不可在实体与属性之间寻找。
    实体关系分为一对一(11)、一对多(多对一)(1M)和多对多(MN)三种。
    一个A类实体只对应一个B类实体,同时,一个B类实体只对应一个A类实体。这就是一对一关系。比如:班级与班长之间。
    一对多关系说的是,一个A类实体对应一些B类实体,同时,一个B类实体只对应一个A类实体。如前面举例中,班级与学生的关系就是典型的一对多关系。
    最后,多对多关系是一个A类实体对应一些B类实体,同时,一个B类实体同样对应一些A类实体。例如,学生与科目就是如此。
    在关系型数据库中,无法直接实现多对多关系。所以在数据库建模时,一般不会建立多对多关系。如果实体与实体之间存在多对多关系,只有添加一个中间表,又叫关系表来实现。中间表本身只含有多对多两实体的主键,通常没有什么用,但为了使其有意义,我们在其中添加了其他有效信息。学生成绩管理建模中,这个中间表就是成绩表。它将学生表和科目表联系起来,其中又增添了成绩和考试日期的信息。
    另外,在找寻实体关系时一定要从一个实体出发去寻找,万不可从多个实体出发。在实际开发,如果从多个实体出发去寻找实体关系,业务一复杂,就无法正确找到实体之间的关系了。
主键
    为一个实体设置一个唯一的特殊编号,这个编号就称为主键。学生的学号、班级的编号、科目的编号、成绩的自动编号等都是主键。
    在数据库中,主键的主要作用是标识一个实体,即给一个对象设置一个编号。也就是说,实体用主键来标识。使得实体与众不同,让计算机能够认别和区别。
    用一个字段所表示的主键称为简单主键,如学号、班级编号、科目编号、自动编号;用多个字段组合代表的主键即为复合主键,在成绩表中,学号和科目编号的组合可做复合主键。所以主键有简单主键、复合主键两类。
    复合主键使用起来很不方便,于是我们在成绩表中添加了自动编号,或称流水号作为主键。其没有任何实际的意义,当业务发生改变时,也不用随之改变,并且方便对记录进行增删改。这种主键称为代理主键。相对的,还有一类主键被称为业务主键。见名知意,该类主键包含了业务含义,使用时意义明确,但当业务发生变化时,该类主键通常也要进行修改。
外键
    一个实体使用了另一个实体的编号,那么这个被引用的编号叫外键。学生表中的班级编号、成绩表中的学号和科目编号就是外键。而这些外键,又分别是班级实体的主键、学生实体的主键以及科目实体的主键。由此可看出,外键一定是另一个实体的主键。
    实体间的关系可以通过外键来反映。当外键存在时,实体关系也一定存在,但不能说没有外键实体间的关系就不存在。学生与科目之间就是一个例子。学生表和科目表中都没有对方的主键作为外键存在,可是它们有关系存在,只是通过了成绩表(中间表)相互联系在一起。换言之,外键能够反映实体关系,而实体关系不一定要由外键反映。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值