【數據庫】到底什麼是關係?

計算機學習者常常會用到諸如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的域能夠是整數)。

那麼,爲何既然有域了,我還要有屬性名呢?

由於,實際業務中,不少屬性都來源於同一個域,咱們能夠有效地區分,例如:身高和體重都來源於浮點型域,姓名和地址都來源於字符串類型域。

至此,什麼是關係,什麼是表,在數據庫使用中,咱們爲何要這麼定義表,從根本上都是有緣由的,相信,你已經明白了。再見~

相關文章
相關標籤/搜索