C# 資料操作系列 - 0. 序言
阿新 • • 發佈:2020-05-09
# 0. 前言
在上一個系列中,我們初步瀏覽了一下C#的基礎知識。這句話的意思就是C#基礎知識系列完結了,撒花。當然,並不是因為C#已經講完了。正是因為我們輕輕地叩開了那扇門,才能看到門後面那瑰麗的世界。那麼,門後面有什麼?就讓我在後續的篇幅裡,帶著大家一起瀏覽吧。
## 0.1 C# 能做什麼
之前在開發工具篇大概為大家介紹了.net 分的方向,.net framework,.net core,mono,UWP 這四個。嚴格講這不是技術區分的方向,而是基於SDK的區分。
說起能完成的功能,接下來給大家看一個圖:
![image-20200508193704447](https://img2020.cnblogs.com/other/1266612/202005/1266612-20200509090923678-1426472450.png)
這是微軟官網對.net能做的事情一個整體的描述。當然,其中某些方向**暫時**只能在Visual Studio上開發,所以需要Windows系統。當然了,並不是一直都只能在Windows下開發。微軟正在一步一步的遷移到.net core或者說是.net standard(標準)上。
說到這裡,重新介紹一下.net standard和.net framework以及.net core的區別吧。
.net standard也叫 dotnet 標準,是一套正式的.net API規範,進一步提高.net生態的一致性。而.net core正是在.net standard體系下的一個產物。
所以我們大概總結一下C#能做什麼吧:
1. 網站
2. 桌面應用
3. 遊戲
4. 微服務應用
5. 手機APP
6. 人工智慧
7. 物聯網
嗯,基本是涵蓋了網際網路絕大多數的專案類別,所以C#的前景還是可以的。
## 0.2 什麼是資料庫
資料庫的英文名字是Database,是指按照資料結構來組織、管理資料的倉庫。而我們常說的資料庫還有另外一種意思,指資料庫管理系統,也就是 Database Management System,用來高效地管理、獲取資料。
所以,我們平時在使用資料庫的時候,會同時搭配資料庫管理系統進行。當然,對於一個開發而言,並不需要精通資料庫管理系統,這部分的工作屬於DBA(Database Administrator,資料庫管理員)的。
# 1. 常用資料庫
很多時候說到資料庫的時候,其實一般指的都是關係型資料庫。近年來,因為高併發和大資料時代的到來,關係型資料庫無法很好地滿足需求,於是大牛們研究出了非關係型資料庫。
## 1.1 關係型資料庫
關係型資料庫(Relational Database),是指使用關係模型來組織資料的資料庫,最大的特徵就是以行的形式表示實體,以列的形式表示實體的欄位,一張表為一組實體,多張表聯合起來就組成了一個數據庫。
這裡簡單介紹一下 關係型資料庫的幾大巨頭:
**1. Microsoft SQL Server:**
微軟開發的資料庫,早期版本只支援Windows環境,而且安裝簡單,效能和維護相對不錯,然後被中小企業所接受並使用。在前幾年,微軟為Linux開發了對應的版本,甚至增強了企業級效能。在SQL Server2019之前的版本,SQL Server對應的管理程式 SQL Server Management Studio 是與資料庫安裝映象一起的,可以在安裝資料庫的時候直接安裝。在2019,則取消了SQL Server Management Studio 與安裝包的掛鉤,使用者就可以自行安裝SQL Server Management Studio程式。
![image-20200508233740733](https://img2020.cnblogs.com/other/1266612/202005/1266612-20200509090924207-2092460429.png)
這是微軟給出的宣傳亮點。
MS SQL Server是收費的,而且正版的費用不是很便宜,但對於普通開發而言,有科學方式(微軟一概在這方面特別大方)來免費試用旗艦版。
![image-20200508234257861](https://img2020.cnblogs.com/other/1266612/202005/1266612-20200509090924529-127015979.png)
當然了,MS SQL Server還有兩個不收費的版本,不過功能不如旗艦版的全:
![image-20200508234341659](https://img2020.cnblogs.com/other/1266612/202005/1266612-20200509090924723-832169810.png)
所以對於一個獨立專案或者中小型企業而言不失為一個好的選擇。
**2. Oracle資料庫**
最出名的企業級資料庫,與MS SQL Server不同的是,Oracle從出生就備受企業級應用的青睞。其獨到的特性支援和資料庫DBMS,以及它強大的效能,都是決定性的亮點。
但Oracle資料庫也是一個對開發者不太友好的資料庫。因為如果開發者如果需要安裝的話,需要在Oracle官網有一個賬號。然後下載兩個安裝包,總計4G左右。安裝過程十分複雜,稍有不慎就需要解除安裝已安裝完成的配件接著重新安裝。
嗯,最重要的一點是,企業使用收費。
![image-20200509001402138](https://img2020.cnblogs.com/other/1266612/202005/1266612-20200509090925110-1768738444.png)
> 點選下載後,如果沒登陸的話,會跳轉到這個頁面
>
> ![image-20200509001506067](https://img2020.cnblogs.com/other/1266612/202005/1266612-20200509090925603-1089617286.png)
**3.MySQL**
說到資料庫,根本沒法繞過MySQL。MySQL之前是一個開源的資料庫,所有人都可以正常使用,不需要像Oracle一樣 註冊賬號。MySQL提供了一個收費版和一個社群版(免費版)。可以說是一個十分適合初學者的資料庫,甚至因為其開源的特性,使得眾多廠商都可以根據自己的業務邏輯從新發佈一個MySQL的版本。
這是它版本的部分區別:
![image-20200509003018332](https://img2020.cnblogs.com/other/1266612/202005/1266612-20200509090925949-1765195482.png)
MySQL後來被Oracle公司收購了,維護和更新就變得有點迷。因為Oracle的名聲不太好,再加上Oracle對MySQL並不上心,就有大神依賴於MySQL的原始碼重新搞了MariaDB。
**4.MariaDB**
MariaDB是MySQL的一個復刻版。出於對Oracle一概名聲的信任,當時MySQL原始開發組的一批小夥伴覺得搞一個基於GNU GPL下的開源專案來。
MariaDB的API和命令與MySQL完全一致,但是MariaDB更換了資料引擎。
## 1.2 非關係型資料庫
NOSQL(Not only sql)是對不同於傳統關係型資料庫的統稱。這是近幾年興起的概念,裡面有很多後起之秀。
> 當代典型的關係資料庫在一些資料敏感的應用中表現了糟糕的效能,例如為巨量文件建立索引、高流量網站的網頁服務,以及傳送流式媒體[5]。關係型資料庫的典型實現主要被調整用於執行規模小而讀寫頻繁,或者大批量讀而極少寫訪問的事務。
>
> NOSQL的結構通常提供弱一致性的保證,如最終一致性,或交易僅限於單個的資料項。不過,有些系統,提供完整的ACID保證在某些情況下,增加了補充中介軟體層(例如:CloudTPS)[6]。有兩個成熟的系統有提供快照隔離的列儲存:像是Google基於過濾器系統的BigTable[7],和滑鐵盧大學開發的HBase[8]。這些系統,自主開發,使用類似的概念來實現多行(multi-row)分散式ACID交易的快照隔離(snapshot isolation)保證為基礎列儲存,無需額外的資料管理開銷,中介軟體系統部署或維護,減少了中介軟體層。
>
> 少數NOSQL系統部署了分散式結構,通常使用分散式散列表(DHT)將資料以冗餘方式儲存在多臺伺服器上。依此,擴充系統時候新增伺服器更容易,並且擴大了對伺服器失效的承受能程度。
以上內容來源於維基百科。
關於非關係型資料庫後續也會進行介紹,現在就淺藏輒止吧。
# 2. 總結
本篇是《C# 資料訪問系列》的開篇,在這裡簡單介紹了一下資料庫有哪些和一些簡單的區分。這個系列主要講C# 通過ADO.NET 、EF、Nhibernate等ORM(物件關係對映)框架訪問和操作資料。
下一篇將簡單介紹一下SQL以及常用SQL的寫法。
> 更多內容煩請關注[我的部落格《高先生小屋》](https://www.attachie.club)
![file](https://img2020.cnblogs.com/other/1266612/202005/1266612-20200509090926289-1449712