提交 9c2b5410 编写于 作者: W wizardforcel

2019-08-29 11:53:56

上级 45ea93b4
......@@ -4,10 +4,11 @@
当表的属性唯一地标识同一表的另一个属性时,表的属性被认为是彼此依赖的。
例如:假设我们有一个包含属性的学生表:Stu_Id,Stu_Name,Stu_Age。这里 Stu_Id 属性唯一地标识学生表的 Stu_Name 属性,因为如果我们知道学生 ID,我们可以告诉与之相关的学生姓名。这被称为函数依赖,可以写成 Stu_Id-> Stu_Name,或者我们可以说 Stu_Name 在函数上依赖于 Stu_Id
例如:假设我们有一个包含属性的学生表:`Stu_Id``Stu_Name``Stu_Age`。这里`Stu_Id`属性唯一地标识学生表的`Stu_Name`属性,因为如果我们知道学生 ID,我们可以告诉与之相关的学生姓名。这被称为函数依赖,可以写成`Stu_Id -> Stu_Name`,或者我们可以说`Stu_Name`在函数上依赖于`Stu_Id`
**正式**
如果表的列 A 唯一地标识同一表的列 B,那么它可以表示为 A-> B(属性 B 在函数上依赖于属性 A)
如果表的列`A`唯一地标识同一表的列`B`,那么它可以表示为`A -> B`(属性`B`在函数上依赖于属性`A`)。
### 函数依赖的类型
......
......@@ -2,14 +2,14 @@
> 原文: [https://beginnersbook.com/2015/04/trivial-functional-dependency-in-dbms/](https://beginnersbook.com/2015/04/trivial-functional-dependency-in-dbms/)
如果属性集包含该属性,则属性对一组属性的依赖性称为普通函数依赖性。
如果属性集包含某属性,则该属性对一组属性的依赖性称为平凡函数依赖性。
**符号**:如果 B 是 A 的子集,则 A - > B 是平凡的函数依赖。
**符号**:如果`B``A`的子集,则`A -> B`是平凡的函数依赖。
以下依赖性也是平凡的:A-> A& B->
以下依赖也是平凡的:`A -> A``B -> B`
**例如**:考虑一个包含两列 Student_id 和 Student_Name 的表。
**例如**:考虑一个包含两列`Student_id``Student_Name`的表。
{Student_Id,Student_Name} - > Student_Id 是一个平凡的函数依赖,因为 Student_Id 是{Student_Id,Student_Name}的子集。这是有道理的,因为如果我们知道 Student_Id 和 Student_Name 的值,那么可以唯一地确定 Student_Id 的值。
`{Student_Id, Student_Name} -> Student_Id`是一个平凡的函数依赖,因为`Student_Id``{Student_Id, Student_Name}`的子集。这是有道理的,因为如果我们知道`Student_Id``Student_Name`的值,那么可以唯一地确定`Student_Id`的值。
另外,Student_Id - > Student_Id& Student_Name - > Student_Name 也是平凡的依赖关系。
\ No newline at end of file
另外,`Student_Id -> Student_Id``Student_Name -> Student_Name`也是平凡的依赖关系。
\ No newline at end of file
......@@ -2,17 +2,23 @@
> 原文: [https://beginnersbook.com/2015/04/non-trivial-functional-dependency-in-dbms/](https://beginnersbook.com/2015/04/non-trivial-functional-dependency-in-dbms/)
如果函数依赖性 X-> Y 在 Y 不是 X 的子集的情况下成立,那么这种依赖性称为非平凡的函数依赖性。
如果函数依赖`X -> Y``Y`不是`X`的子集的情况下成立,那么这种依赖性称为非平凡的函数依赖性。
**例如**
具有三个属性的员工表:emp_id,emp_name,emp_address。
具有三个属性的员工表:`emp_id``emp_name``emp_address`
以下函数依赖是非平凡的:
emp_id - > emp_name(emp_name 不是 emp_id 的子集)
emp_id - > emp_address(emp_address 不是 emp_id 的子集)
另一方面,以下依赖性是微不足道的:
{emp_id,emp_name} - > emp_name [emp_name 是{emp_id,emp_name}的一个子集]
参考:[平凡的函数依赖](https://beginnersbook.com/2015/04/trivial-functional-dependency-in-dbms/ "Trivial functional dependency in DBMS with example")
+ `emp_id -> emp_name``emp_name`不是`emp_id`的子集)
+ `emp_id -> emp_address``emp_address`不是`emp_id`的子集)
另一方面,以下依赖性是平凡的:
+ `{emp_id, emp_name} -> emp_name``emp_name``{emp_id, emp_name}`的一个子集)
参考:[平凡的函数依赖](https://beginnersbook.com/2015/04/trivial-functional-dependency-in-dbms/)
**完全非平凡 FD**
**完全非平凡 FD**
如果 FD X-> Y 在 X 交点 Y 为空的情况下保持为真,则该依赖性被认为是完全非平凡的函数依赖性。
\ No newline at end of file
如果 FD `X -> Y``X``Y`为空的情况下为真,则该依赖性被认为是完全非平凡的函数依赖。
......@@ -15,7 +15,7 @@
| M2222 | 2009 | Black |
| M2222 | 2009 | Red |
这里的列`manuf_year`和颜色彼此独立并依赖于`bike_model`。在这种情况下,这两列说是多值的,取决于`bike_model`。这些依赖关系可以表示如下:
这里的列`manuf_year`和颜色彼此独立并依赖于`bike_model`。在这种情况下,这两列可以说是多值的,取决于`bike_model`。这些依赖关系可以表示如下:
```
bike_model ->> manuf_year
......
......@@ -2,27 +2,27 @@
> 原文: [https://beginnersbook.com/2015/04/transitive-dependency-in-dbms/](https://beginnersbook.com/2015/04/transitive-dependency-in-dbms/)
如果函数依赖性由两个函数依赖性间接形成,则称其是可传递的。对于例如
如果函数依赖性由两个函数依赖性间接形成,则称其是传递的。例如:
X - >如果以下三个函数依赖项成立,则 Z 是传递依赖:
`如果以下三个函数依赖项成立,则`X -> Z`是传递依赖:
* X-> Y
* Y 没有 - > X.
* Y-> Z
* `X -> Y`
* `Y !-> X`
* `Y -> Z`
**注意:**传递依赖只能在三个或更多属性的关系中发生。这种依赖性有助于我们在 3NF(3 <sup>rd</sup> Normal Form)中对数据库进行标准化。
**注意:**传递依赖只能在三个或更多属性的关系中发生。这种依赖性有助于我们在 3NF(第三范式)中对数据库进行标准化。
**示例**:让我们举一个例子来更好地理解它:
| **书** | **作者** | **Author_age** |
| 权力的游戏 | 乔治 R.马丁 | 66 |
| 哈利波特 | JK 罗琳 | 49 |
| 死于光明 | George R. R. Martin | 66 |
| **Book** | **Author** | **Author_age** |
| Game of Thrones | George R. R. Martin | 66 |
| Harry Potter | J. K. Rowling | 49 |
| Dying of the Light | George R. R. Martin | 66 |
{书} - > {作者}(如果我们知道这本书,我们知道作者姓名)
`{Book} ->{Author}`(如果我们知道这本书,我们知道作者姓名)
{作者}没有 - > {书}
`{Author} !-> {Book}`
{作者} - > {} Author_age
`{Author} -> {Author_age}`
因此,根据**传递依赖的规则**:{Book} - > {Author_age}应该持有,这是有道理的,因为如果我们知道书名,我们就可以知道作者的年龄。
\ No newline at end of file
因此,根据**传递依赖的规则**:`{Book} -> {Author_age}`应该成立,这是有道理的,因为如果我们知道书名,我们就可以知道作者的年龄。
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册