【資料庫】到底什麼是關係?

来源:https://www.cnblogs.com/labixiaohei/archive/2019/12/27/12105453.html
-Advertisement-
Play Games

電腦學習者經常會用到諸如Sqlserver Mysql Orcal 等“關係型”資料庫。 問題一:那麼,到底什麼是“關係”呢? 首先,我們來看以下三組數據 註:A1,A2表示具體的某個人,比如張三,李四 我們用數學集合的形式對其進行表達,得到三個集合 男人: D1 { A1,A2,A3 } 女人: ...


電腦學習者經常會用到諸如Sqlserver Mysql Orcal 等“關係型”資料庫。

 

問題一:那麼,到底什麼是“關係”呢?

 

首先,我們來看以下三組數據

                     

註:A1,A2表示具體的某個人,比如張三,李四

我們用數學集合的形式對其進行表達,得到三個集合

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

  我們稱 D1 D2 D3 為 “

 接來下,我們將這三個集合取笛卡爾積(如果不懂的話,請自行查閱,簡單理解就是從三個集合中元素里各取一個,能夠形成的所有組合)

  D1*D2*D3=? 直觀來說,結果顯示在下表內   

  

顯然,該結果整體並沒有什麼真實含義,單純的作為一些數據的組合,於是,我們便通過“某一關係”將表中含有意義的部分選擇出來,如下圖:

 

  

 

通過“家庭”這種“關係”我們便得到了上表,其中意義顯而易見且通俗易懂,正是我們人類,資料庫管理人員、開發者等所需要的。這個表再關係型資料庫中被稱為“關係”。

其中,丈夫,妻子,子女統稱為屬性名,家庭作為關係名或表名。

 

由此表,可得到一些解釋:

  1.元組:一行完整的數據,如A1 B1 C1

  2.關係:屬性名+表名+數據

  3.關係模式:屬性名+表名

 

通過對比可看出關係與關係模式的異同,同一關係模式下可能存在多種關係,比如隨著時間的推移,人口的更變,表中數據發生了變化,所以關係模式是穩定的,關係是不穩定的。

 

問題二:那麼,我們為什麼要通過求笛卡爾積這種思路來理解這部分的學習呢?電腦與數學到底是什麼關係呢?

 

有人說,“數學是上帝的語言”。我們作為開發者,雖然我們最常使用的是高級語言,諸如C++ JAVA C#,他們代碼的書寫方式,語法,編程範式,編程思想都更加接近於人類的思考

縱觀電腦語言發展歷史,語言的目的在於溝通,作為一端,電腦本質上只是一門工具,語言的發展本質上是應該更好的服務於開發者,使其更容易專註於業務,而非機器邏輯。

 

但是,為了讓機器更加高效的服務,我們不得不在一些事上有所側重,一些底層系統更是如此。

顯然,電腦並不能直接理解我們的話,他直接理解的可能只有01,只有邏輯運算,只有線性運算(只有加法與乘法構成的運算),因此,我們為了讓電腦能夠聽懂並且好用,我們需要定義“數學模型”!

看到這裡,很多問題迎刃而解,為什麼我們要用笛卡爾積,為什麼我們要取他的子集,甚至為什麼我們要在每個列上取一個新的名字並且標註他的類型(如,學生表中的年齡(int))。

歸根結底,我們在尋求一種來自於數學的精准定義,電腦能夠理解並執行的數學模型! 模型如下:

關係模式  R(A1:D1,A2:D2,...,An:Dn);

舉個例子,家庭(丈夫:男人,妻子:女人,孩子:兒童);

家庭作為關係名,丈夫作為屬性,:後面跟著的男人就是丈夫所屬的“域”(你可以理解為,領域或類型,比如1、2、3的域可以是整數)。

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

因為,實際業務中,很多屬性都來源於同一個域,我們可以有效地區分,例如:身高和體重都來源於浮點型域,姓名和地址都來源於字元串類型域。

至此,什麼是關係,什麼是表,在資料庫使用中,我們為什麼要這麼定義表,從根本上都是有原因的,相信,你已經明白了。再見~

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 如標題所言,需要把2列的數據進行對調,列1的值存入列2,把列2的值存儲列1中去。 如何實現,2種方法: 第1種,對列名進行修改,把name1改為name2,把name2改為name1即可: sp_rename 'Q3.name1',temp_name1,'column' GO sp_rename ' ...
  • 服務發現 其實簡單說,服務發現就是解耦服務與IP地址之間的硬綁定關係,以典型的集群為例,對於集群來說,是有多個節點的,這些節點對應多個IP(或者同一個IP的不同埠號),集群中不同節點責任是不一樣的。比如說一個數據集群中,可以分為讀節點或者寫節點,寫節點和讀節點都是相對的,不是硬綁定的,某一個邏輯節 ...
  • 雖然本人在開發資料庫時,不太使用視圖,但是還是知道 如何獲取視圖中使用的所有表列: SELECT * FROM INFORMATION_SCHEMA.VIEW_COLUMN_USAGE 如何獲取包含視圖所有表: SELECT * FROM INFORMATION_SCHEMA.VIEW_TABLE_ ...
  • 以ms sql server 14 v17為例。 如下表dbo.Q中有一個欄位'' 首先在資料庫的系統存儲過程列表中: 找到sys.sp_addextendedproperty,使用這個為欄位添加一個說明。 EXECUTE [sys].[sp_addextendedproperty] @name=N ...
  • --閃回 回退已刪除的數據 select * from NCMS_SPECIALIST_CHRONIC as of timestamp to_timestamp('2019-12-16 9:04:00', 'yyyy-mm-dd hh24:mi:ss'); --開啟這張表的狀態 alter tabl ...
  • 話不多說先上圖,這是啟動類的配置,這裡配置了@ComponentScan("我的mapper的介面") 接下來是我的項目結構截圖 然後是service 的截圖,我在這裡加了註解@Service 最後我在測試類裡面 的截圖 最後附上我的maven的pom 我開始懷疑是這個配置的有問題了 <?xml v ...
  • Vmvare設置好虛擬機的磁碟大小之後,發現磁碟空間不夠了,這個時候怎麼擴展磁碟的大小呢? 首先,在確保虛擬機關閉的情況下,右鍵設置,選擇硬碟,擴展,這樣就可以增加磁碟的大小。 但是由於未進行分區和磁碟掛載的設置,我們啟動虛擬機以後並不能使用增加的磁碟空間,這個時候怎麼辦呢?有兩種辦法 先用root ...
  • create procedure #pr_CreateFileGroup @dbname nvarchar(max), @filegroupname nvarchar(max) as begin /* 腳本來源:https://www.cnblogs.com/zhang502219048/p/121 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...