功能依赖与一对多(或多对多)关系
Functional dependency vs one-to-many (or many-to-many ) relationships
明白了什么
1)一个FD(函数依赖)是
A --> B 即对于 A 中的值 a1,B 中将有一个相应的唯一值 b1。
2) 在一对多关系中,
对于A中的值a1,B中将有一个或多个对应值,即b1或b1,b2,b3等。我的问题是一对一的部分。
Q1) 这种关系在规范化术语中是否有其他名称。 (MVD 可以进入图片,但可以暂时忽略它,因为我只谈论一组数据,除非其余数据被认为是空的。)
Q2) 是一个 FD 的一对多关系(或者它是一个 MVD - 只是澄清一下,否则忽略这个)??问这个问题可能看起来很疯狂。但是 A 和 B 之间肯定有很多关系,因为 B 的值仍然由 A 决定,而这来自问题域(换句话说......功能世界)。
Ex-A 学生仍然决定他想注册哪些课程。他可能仍然可以自由报名参加 5 或 7 门课程,这只是 基数 。但它仍然是学生,也是唯一决定课程的学生(以及他们中有多少人。)
或者换句话说 - 一对多表示 "cardinality" 但关系本身呢。 CALL IT WHAT?(它仍然可以被称为功能性的还是其他一些关于决定其余部分的东西)
关系 R (A, B, C, ...)
中的函数依赖性 A → B
是 R
的实例(即 R
的任意一组元组)满足的约束,其中,每次有两个或多个元组具有相同的属性值A
,则所有具有相同的属性值B
(注意A
和 B
也可以是属性集)(R
的“有效”实例)。
由于A
的某个值不能有不同的B
值,这种情况被称为“函数依赖”,“意思”是你在建模一个世界其中某个值由另一个值唯一确定(例如,给定一个人的 SSN,您就有一个唯一的生日)。
虽然在对某些情况进行建模时,您可以说属性的一组值是由另一个属性唯一确定的(例如,给定一个人的 SSN,您拥有一组独特的技能),但没有“归一化理论中的“等效”约束,这是因为关系的属性只能具有基本值,而不是一组值。因此,如果您使用属性 SSN 和 Skill 对这种情况进行建模,则需要将具有相同 SSN 和不同技能的多行实例放入一个实例中,以表示一个人的所有技能。
相反,在归一化理论中,您可以拥有的是另一个约束,称为多值依赖性,只有当您在同一关系中同时拥有 ,有多种情况,如上例。例如,如果你有像 Employees(SSN, Skill, Child)
这样的关系,如果某个员工有 n 技能并且 m children ,您应该为该员工用 n x m 行表示此信息,m 行包含所有每个技能 children,对称 n 行,每个 child 包含所有技能。在这种情况下,我们可以说一个实例是有效的,如果它满足一对 MVD SSN →→ Skill
和 SSN →→ Child
,或者等效地,二元连接依赖 Employees = SSN Skill ⨝ SSN Child
。这相当于说关系可以安全地1分解为两个关系,E1(SSN, Skill)
,E2(SSN, Child)
。
1即不丢失信息
明白了什么
1)一个FD(函数依赖)是
A --> B 即对于 A 中的值 a1,B 中将有一个相应的唯一值 b1。
2) 在一对多关系中,
对于A中的值a1,B中将有一个或多个对应值,即b1或b1,b2,b3等。我的问题是一对一的部分。
Q1) 这种关系在规范化术语中是否有其他名称。 (MVD 可以进入图片,但可以暂时忽略它,因为我只谈论一组数据,除非其余数据被认为是空的。)
Q2) 是一个 FD 的一对多关系(或者它是一个 MVD - 只是澄清一下,否则忽略这个)??问这个问题可能看起来很疯狂。但是 A 和 B 之间肯定有很多关系,因为 B 的值仍然由 A 决定,而这来自问题域(换句话说......功能世界)。 Ex-A 学生仍然决定他想注册哪些课程。他可能仍然可以自由报名参加 5 或 7 门课程,这只是 基数 。但它仍然是学生,也是唯一决定课程的学生(以及他们中有多少人。) 或者换句话说 - 一对多表示 "cardinality" 但关系本身呢。 CALL IT WHAT?(它仍然可以被称为功能性的还是其他一些关于决定其余部分的东西)
关系 R (A, B, C, ...)
中的函数依赖性 A → B
是 R
的实例(即 R
的任意一组元组)满足的约束,其中,每次有两个或多个元组具有相同的属性值A
,则所有具有相同的属性值B
(注意A
和 B
也可以是属性集)(R
的“有效”实例)。
由于A
的某个值不能有不同的B
值,这种情况被称为“函数依赖”,“意思”是你在建模一个世界其中某个值由另一个值唯一确定(例如,给定一个人的 SSN,您就有一个唯一的生日)。
虽然在对某些情况进行建模时,您可以说属性的一组值是由另一个属性唯一确定的(例如,给定一个人的 SSN,您拥有一组独特的技能),但没有“归一化理论中的“等效”约束,这是因为关系的属性只能具有基本值,而不是一组值。因此,如果您使用属性 SSN 和 Skill 对这种情况进行建模,则需要将具有相同 SSN 和不同技能的多行实例放入一个实例中,以表示一个人的所有技能。
相反,在归一化理论中,您可以拥有的是另一个约束,称为多值依赖性,只有当您在同一关系中同时拥有 ,有多种情况,如上例。例如,如果你有像 Employees(SSN, Skill, Child)
这样的关系,如果某个员工有 n 技能并且 m children ,您应该为该员工用 n x m 行表示此信息,m 行包含所有每个技能 children,对称 n 行,每个 child 包含所有技能。在这种情况下,我们可以说一个实例是有效的,如果它满足一对 MVD SSN →→ Skill
和 SSN →→ Child
,或者等效地,二元连接依赖 Employees = SSN Skill ⨝ SSN Child
。这相当于说关系可以安全地1分解为两个关系,E1(SSN, Skill)
,E2(SSN, Child)
。
1即不丢失信息