【数据库】到底什么是关系?

计算机学习者常常会用到诸如Sqlserver Mysql Orcal 等“关系型”数据库。sql

 

问题一:那么,到底什么是“关系”呢?数据库

 

首先,咱们来看如下三组数据编程

                     

注:A1,A2表示具体的某我的,好比张三,李四工具

咱们用数学集合的形式对其进行表达,获得三个集合学习

  男人: D1 { A1,A2,A3 }
  女人: D2 { B1,B2,B3 }
  小孩: D3 { C1,C2,C3 }spa

  咱们称 D1 D2 D3 为 “server

 接来下,咱们将这三个集合取笛卡尔积(若是不懂的话,请自行查阅,简单理解就是从三个集合中元素里各取一个,可以造成的全部组合)blog

  D1*D2*D3=? 直观来讲,结果显示在下表内   开发

  

显然,该结果总体并无什么真实含义,单纯的做为一些数据的组合,因而,咱们便经过“某一关系”将表中含有意义的部分选择出来,以下图:字符串

 

  

 

经过“家庭”这种“关系”咱们便获得了上表,其中意义显而易见且通俗易懂,正是咱们人类,数据库管理人员、开发者等所须要的。这个表再关系型数据库中被称为“关系”。

其中,丈夫,妻子,子女统称为属性名,家庭做为关系名或表名。

 

由此表,可获得一些解释:

  1.元组:一行完整的数据,如A1 B1 C1

  2.关系:属性名+表名+数据

  3.关系模式:属性名+表名

 

经过对比可看出关系与关系模式的异同,同一关系模式下可能存在多种关系,好比随着时间的推移,人口的更变,表中数据发生了变化,因此关系模式是稳定的,关系是不稳定的。

 

问题二:那么,咱们为何要经过求笛卡尔积这种思路来理解这部分的学习呢?计算机与数学究竟是什么关系呢?

 

有人说,“数学是上帝的语言”。咱们做为开发者,虽然咱们最常使用的是高级语言,诸如C++ JAVA C#,他们代码的书写方式,语法,编程范式,编程思想都更加接近于人类的思考

纵观计算机语言发展历史,语言的目的在于沟通,做为一端,计算机本质上只是一门工具,语言的发展本质上是应该更好的服务于开发者,使其更容易专一于业务,而非机器逻辑。

 

可是,为了让机器更加高效的服务,咱们不得不在一些事上有所侧重,一些底层系统更是如此。

显然,计算机并不能直接理解咱们的话,他直接理解的可能只有01,只有逻辑运算,只有线性运算(只有加法与乘法构成的运算),所以,咱们为了让计算机可以听懂而且好用,咱们须要定义“数学模型”!

看到这里,不少问题迎刃而解,为何咱们要用笛卡尔积,为何咱们要取他的子集,甚至为何咱们要在每一个列上取一个新的名字而且标注他的类型(如,学生表中的年龄(int))。

归根结底,咱们在寻求一种来自于数学的精准定义,计算机可以理解并执行的数学模型! 模型以下:

关系模式  R(A1:D1,A2:D2,...,An:Dn);

举个例子,家庭(丈夫:男人,妻子:女人,孩子:儿童);

家庭做为关系名,丈夫做为属性,:后面跟着的男人就是丈夫所属的“域”(你能够理解为,领域或类型,好比一、二、3的域能够是整数)。

那么,为何既然有域了,我还要有属性名呢?

由于,实际业务中,不少属性都来源于同一个域,咱们能够有效地区分,例如:身高和体重都来源于浮点型域,姓名和地址都来源于字符串类型域。

至此,什么是关系,什么是表,在数据库使用中,咱们为何要这么定义表,从根本上都是有缘由的,相信,你已经明白了。再见~

相关文章
相关标签/搜索