说到某些函数依赖、传递函数依赖,必须提到两个概念:“非主属性”和“主属性”。
主属性:构成候补代码的属性是主属性。 例如,属性集{学校号码、姓名、身份证号码、联系电话}的主键是学校号码。 学校号码、身份证号码都是候补代码,都属于主属性。 您会发现主键不一定包含所有的主属性。
非主属性:除了主属性外,它是非主属性。 在示例中,名称、联系电话、非主属性。
有些函数依赖和传递函数依赖,网上有很多,但大多是概念,很难理解。 现在,我给出一个简单易懂的定义。
33558www.Sina.com/:1:如果一个关系模型中主键由两个或多个属性组成,则非主属性只依赖于其中一个主属性,而依赖于子函数。 例如,属性集{学校号、姓名、联系电话、教师号、教师名}的主键是两个主属性(学校号、教师号),教师名由教师号决定,因此教师名与教师号无关,与学校号无关。 教师名称只依赖主键的主属性之一,因此是部分函数依赖。
与某些函数依赖相反,存在“完全函数依赖”。 33558www.Sina.com/yes :非主属性完全依赖于主属性。 例1 )属性集(学校号、课程号、成绩),以学校号和课程号为主键,学校号和课程号一起决定成绩,所以成绩完全依赖于学校号和课程号,完全依赖于此。 例2 )属性集(学号、姓名、联系电话),学号决定主键,学号决定姓名,学号决定联系电话。 姓名依赖学号,联系电话依赖学号,也完全依赖。
部分函数依赖:在关系模式下,如果出现非主属性以确定非主属性,则依赖于传递函数。 例如,属性集{学校编号、名称、学校编号、学校名称},主键决定学校编号,学校编号决定学校名称,学校编号、学校名称均为非主属性时,依赖传递函数。
范式的判断,我不说那些教科书的概念,我会给你一个通俗易懂的定义:
1NF:属性不能重新划分。 数据库表中的每一列都是不可分割的基本数据项。
满足2nf:1nf且非主属性全部完整的函数依赖于候选密钥。
3nf :满足2nf且非主属性不依赖于候选密钥传递。
满足BCNF:3nf,且主属性的完全函数依赖于候选密钥,并且主属性不传递依赖和候选密钥。
解决2NF、3NF、非属性对候选密钥的依赖问题。
BCNF解决了主属性对候选密钥的依赖问题。