您的位置:首页 > 数据库

sql 范式

2015-07-11 09:21 363 查看
范式,英文 normal from ,直接翻译就是通用的形式。也就是在数据库设计中的通用设计标准。

在说明一个范式前先声明几个概念。表中的关键字。

一张表总会有好几个字段,其中有某些字段是有一定作用的,叫做关键字,关键字有几种:公共关键字,主关键字,外关键字,候选关键字。

公共关键字就是在表中能够共同表示同样的意思的几部分;

主关键字,也会简称主键,主键可以代表这张表的存在;

外关键字,也会简称外键,就是在这张表中可以通过这个外键找到对应的其他表,在语法中要加上一个映射;

候选关键字就是加入表中有几部分都可以作为关键字,选好其中一个作为主键,那么其他的几个就是候选关键字了。

create table test(

  a int primary key,

 b varchar(3)

);

其中表test就是主键

create table test1(

 a int primary key ,

 b varchar(3),

 test_id int,

 foreign key(test_a) test(a)

);

其中a 是主键,test_id 是外键,外键的映射在下一句中  foreign key(test_a) test(a) ,表明这个外键对应表test的主键。

对于这几个关键字就好比美国选总统一样,所有参加被选举的人一起就是公共关键字,最后当上总统那个就是代表美国的人,即主键,参选但是没被选上的就是候选关键字,如果总统刚选上就死掉了,这个候选人就有资格继续参选,如果有某些国家的外加大使在那里看着,这个人就可以当做外键了。

函数依赖:函数依赖是 一种依赖关系,这种关系没有绝对的存在,要看具体的环境,函数依赖就是一张表中,里面的某些字段是有关联的,其他的一个或几个的存在可以决定其他的字段的存在,这个比如表 test(name,address,identity,factory_address),对于这张表大部分的情景下都可以认为是一个人的name,可以决定他的  address, identity  的存在,所以存在依赖(name)->(address,identity),这就是函数依赖。

在sql中一般有  几种范式  第一范式(1NF),第二范式(2NF),第三范式(3NF),BC范式,(还有第四范式和第五范式,这两个不提)。

    第一范式:就是表的中字段的设计要符合原子性,原子性就是不可分开,比如一个字段  名字,名字有名和姓 的存在,所以这个字段就是不符合原子性的。

    第二范式:表中所有的字段都必须和主键有依赖关系,如果主键是组合主键(多个关键字组合形成主键),也必须是同时和组合主键中的所有字段有依赖关系,不能只和主键中部分字段有依赖关系。这样可以看到,如果主键只是一个字段的话,那表就符合第二范式。如果出现不符合第二范式的字段的情况,可将该字段分离出来。

    第三范式:在第二范式的基础上不存在传递依赖(X->Y,Y->Z),如果出现这种情况可以将原来的表(X,Y,Z),分离为两张表,表1(X,Y),表2(Y,Z)。

    BC范式:在第三方式的基础上,候选关键字不存在相互依赖的关系,比如在一种情景中有(X,Y)->(R,Z),(R,Y)->(X,Z),这样(X,Y)和(R,Y)就属于候选关键字,但注意到有这样的关系X->R  和R->X,这样就不符合第三范式了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  范式 依赖 关键字