C# SQL 數據庫:通過 Tim Corey 的課深入了解
在C#應用程式開發的世界中,使用SQL資料庫是您可以學習的最重要技能之一。 在他的视频"C# App Start To Finish Lesson 08 – SQL Database Design"中,Tim Corey演示了設計關聯式資料庫的過程,創建表格,定義關係,並撰寫儲存過程。
在這篇文章中,我們將深入了解Tim的課程,並準確地解釋他所呈現的概念。 如果您想更好地了解C#應用程序如何連接到SQL Server以及如何正確結構化您的資料庫,Tim的視頻提供了絕佳的指南。
資料庫設計入門
在1:00,Tim首先提醒觀眾,他們將在套件中收到所有腳本和檔案,包括資料庫腳本。他強調,目標不是在一節課中成為SQL Server的完整專家,而是了解設計及如何思考資料結構。 隨後,Tim直接進入資料庫圖。
了解資料庫圖
在1:52,Tim強調討論了團隊成員表格並解釋它不會直接存儲一個人的名字或姓氏。 相反,它存儲一個可連到People表格的Person ID。 這是關係資料庫中的一對多關係的例子,其中一個人可以屬於多個團隊。
Tim舉了一個實際的例子:如果有多個錦標賽同時進行,一個人可能會成為不止一個團隊的一部分。 這可以避免數據複製,並展示了如何使用主鍵(primary key)來幫助您高效地查詢數據。 Tim強調,重複的數據是有害的,因為它會導致信息不一致,例如電子郵件地址不一致。
他解釋說,設計方法是使用ID而不是存儲完整的重複數據。 這是良好的SQL Server資料庫設計的基礎。
避免重複的欄位
在4:48,Tim討論為什麼應該避免在單獨的列中存儲多個電子郵件地址,如Email2或Email3。相反,他建議創建一個獨立的電子郵件地址表格,其中包括Person ID和Email Address欄位。 這樣可以讓一個人擁有多個電子郵件地址,而不會讓People表格變得複雜。
Tim解釋說,資料庫設計是在簡單性和靈活性之間的平衡。 在本教程中,他決定只存儲一個電子郵件和一個電話號碼,以保持設計的簡單實用。
在SQL Server Management Studio中創建資料庫
在6:44,Tim切換到SQL Server Management Studio並解釋說,他正在使用SQL Server 2016 Developer Edition,這是免費的而且功能與Enterprise Edition相同。 他指出,不能在生產中使用它,但在本地機器上的開發是理想的。
Tim解釋了兩種創建SQL Server資料庫的方法:通過SSMS對話框或使用SQL查詢。 他偏愛查詢方法,因為它更快。 他使用的命令是:
create database tournaments;
他解釋說,分號很重要,應在每個SQL語句的最後使用。 創建資料庫後,Tim展示如何刷新SSMS窗口以查看新資料庫出現。
檢視表格和表格設計
在12:06,Tim提到他已經使用腳本創建了所有表格。然後他展示了如何在SSMS中打開表格設計器。 Tim解釋說,對C#開發者來說,SQL腳本可能會讓人望而生畏,而設計工具可幫助您以視覺方式編輯表格,而無需記住SQL語法。
Tim使用獎品表格作為例子。 他解釋如何設置主鍵,選擇數據類型和管理空值。 他還指出主鍵有助於SQL優化表存儲和檢索。 沒有主鍵時,SQL將生成一個"堆(heap)",這會使查詢速度變慢。
自動遞增的ID
在15:36,Tim解釋如何使用Identity Specification使ID欄位自動遞增。 他將遞增和種子設置為1。Tim強調,這為每行提供唯一的標識符,並幫助SQL有效地排序數據。
他指出,這種方法讓您以最少的努力達成高效的設計,這對於希望擁有堅實SQL Server資料庫但不想進行複雜調整的C#開發者來說是理想的。
了解數據類型
在18:09,Tim解釋不同的SQL字串類型:varchar, nvarchar和nvarchar(max)。 他描述了:
-
Char:儲存字元
-
Var:變長(達到最大數字)
- N:支援國際字元的Unicode
Tim解釋,nvarchar使用更多儲存空間但支援全球語言,而varchar則適合僅英文的文字。 他還解釋,nvarchar(max)用於非常大的字串如JSON,可能由應用程式儲存並稍後檢索。
金錢和浮點數據類型
在24:00,Tim將SQL數據類型與C#類型進行比較。他使用money來表示貨幣值(類似於C#的decimal)和float來表示百分比(類似於double)。 這有助於C#開發者將SQL類型與其程式設計類型匹配。
表格關係
在25:04,Tim演示如何使用外鍵創建關係。 他打開關係編輯器,解釋主要表格中包含實際的ID,而外部表格引用那個ID。
他也解釋了一個級聯刪除的想法,當刪除父記錄時,自動刪除相關記錄。 Tim警告說,ID應被視為不可變,更改它們是不允許的。
創建新表格
在29:30,Tim演示如何使用SSMS編輯器創建新的表格。 他建立了一個測試人員表格,其欄位包括:
-
名字
-
姓氏
-
電子郵件地址
-
電話號碼
-
子女數量
- 創建日期
Tim展示如何設置默認值,例如將兒童數量設置為0,並使用getdate()設置當前時間。他解釋說,getutcdate()對於跨時區的應用程式更好。
編輯表格中的數據
在39:39,Tim展示如何在SSMS中直接編輯行。 他加入示例記錄並解釋,即使失敗的插入仍然會消耗ID值。 他建議讓SQL繼續自動增量序列,不用擔心缺失的ID。
基本的SQL查詢
在44:23,Tim教授基本的查詢語法:
-
SELECT * FROM 表格
-
WHERE
-
LIKE
-
ORDER BY
- 使用AS的列別名
他指出,SELECT *對於學習是可以的,但在實際應用中,您應該為了性能和清晰性而指定列。
儲存過程
在50:33,Tim介紹了儲存過程。 他解釋儲存過程可以安全地訪問資料庫邏輯並防止SQL注入攻擊。 Tim偏好儲存過程而不是直接訪問表格或視圖,因為它們提供更好的安全性。
他展示了如何創建一個基於錦標賽ID檢索獎品的儲存過程。 他解釋了參數、BEGIN和END塊以及NOCOUNT ON語句。
執行儲存過程
在58:04,Tim創建了一個儲存過程來按姓氏獲取測試人員,並演示如何使用以下命令執行它:
EXEC dbo.SP_TestPerson_GetByLastName 'Corey'
他解釋說,dbo模式是默認的,而SQL Server對過程名不分大小寫。
最終想法
Tim在他的视频中总结說,SQL資料庫設計可能看起來很複雜,但核心概念是簡單的。 他鼓勵觀眾練習和探索,並預告下一节課將要把資料庫連接到C#代碼。
