主码是从候选码中挑出来的一个作为主码,主码和外部码提供了一种表示不同关系之间相互关联的手段。
数据库中码又称数据库主码,是数据库中唯一能标识一个记录值的内部记录标志符。
若关系中的一个属性或属性组的值能够唯一地标识一个元组,且他的真子集不能唯一的标识一个元组,则称这个属性或属性组做候选码。
关系模式R中属性或属性组X并非R的候选码,但X是另一个关系模式的候选码,且X与R的主码对应,则称X是R的外部码,也称外码。
扩展资料:
在两个表的关系中,主码用来在一个表中引用来自于另一个表中的特定记录。主码表定义的一部分。一个表的主键可以由多个主码共同组成,并且主码的列不能包含空值。主码是可选的,并且可在 CREATE TABLE 或 ALTER TABLE 语句中定义。
一个表中只能有一个主键。如果在其他字段上建立主键,则原来的主键就会取消。主键的值不可重复,也不可为空(NULL)。
码是数据系统中的基本概念。所谓码就是能唯一标识实体的属性,他是整个实体集的性质,而不是单个实体的性质。它包括超码,候选码,主码。超码是一个或多个属性的集合,这些属性可以让我们在一个实体集中唯一地标识一个实体。如果k是一个超码,那么k的任意超集也是超码,也就是说如果k是超码,那么所有包含k的集合也是超码。候选码是从超码中选出的,自然地候选码也是一个或多个属性的集合。因为超码的范围太广,很多是我们并不感兴趣即无用处的。所以候选码是最小超码,它们的任意真子集都不能成为超码。例如,如果k是超码,那么所有包含k的集合都不能是候选码;如果k,j都不是超码,那么k和j组成的集合(k,j)有可能是候选码。是从多个候选码中任意选出一个做为主码,如果候选码只有一个,那么候选码就是主码。虽然说主码的选择是比较随意的,但在实际开发中还是要靠一定的经验,不然开发出来的系统会出现很多问题。一般来说主码都应该选择那此从不或者极少变化的的属性。
范式的判断:
第一范式(1NF)无重复的列 属性不可分
第二范式(2NF)属性完全依赖于主键[消除非主属性对主码的部分函数依赖] 符合1NF,并且,非主属性完全依赖于码
第三范式(3NF)属性不依赖于其它非主属性[消除传递依赖] 符合2NF,并且,消除传递依赖
BC范式(BCNF):符合3NF,并且,主属性不依赖于主属性
由于存在 J->K,所以K部分依赖于候选码(IJ),所以不满足第二范式。所以该模式只属于第一范式。
定义:所谓码就是能唯一标识实体的属性,所有码都是集合,超码包括候选码,候选码包括主码,主码都应该选择从不或者极少变化的的属性。
理论联系实际,假设学生(实体)具有多个属性:学号,身份z号,姓名,性别。
性质:如果K是超码,那么所有包含K的集合也是超码。
举例:{学号}是一个超码,那么{学号,身份z号}、{学号,身份z号,姓名}、{学号,身份z号,姓名,性别}、{身份z号}、{身份z号,姓名}、{身份z号,姓名、性别}都是超码。
性质:候选码是最小超码,它们的任意真子集都不能成为超码。
举例:{学号}、{身份z号}都是不可分解。
性质:如果K,J都不是超码,那么K和J组成的集合(K,J)有可能是候选码。
举例:如果性别和姓名可以唯一标识一个学生,则{姓名,性别}也为超码。
先说候选码,候选码就是可以区别一个元组(即表中的一行数据)的属性或属性的集合,比如学生表student(id,name,age,sex,deptno),其中的id是可以唯一标识一个元组的,所以id是可以作为候选码的,既然id都可以做候选码了,那么id和name这两个属性的组合可不可以唯一区别一个元组呢?显然是可以的,此时的id可以成为码,id和name的组合也可以成为码,但是id和name的组合不能称之为候选码,因为即使去掉name属性,剩下的id属性也完全可以唯一标识一个元组,就是说,候选码中的所有属性都是必须的,缺少了任何一个属性,就不能唯一标识一个元组了,给候选码下一个精确的定义就是:可以唯一标识一个元组的最少的属性集合。而码是没有最少属性这个要求的。另外,一个表的候选码可能有多个,从这些个候选码中选择一个做为主码,至于选择哪一个候选码,这个是无所谓的,只要是从候选码中选的就行。
至于主属性,刚才提到了,一个表可以有多个候选码,那么对于某个属性来说,如果这个属性存在于所有的候选码中,它就称之为主属性
说了这么多,有点乱,希望你明白了
以上就是关于数据库中数据库中 码、候选码、外部码之间的关系是什么全部的内容,包括:数据库中数据库中 码、候选码、外部码之间的关系是什么、数据库系统中的“码”是指“候选码”还是“主码”啊、数据库 候选码 范式等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)