C# SQL資料庫:深入探討Tim Corey的課程
[[academy-video-youtube({"vid": "6ixfTsrhPgM", "start_time": "0", "title": "C# App Start To Finish Lesson 08 - SQL Database Design", "creator": "Tim Corey", "length": "1h 08m 25s"})]]
在 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 強調團隊成員表,並解釋它不會直接儲存人的名字或姓氏。 取而代之的是,它儲存了連接回人員表的 Person ID。 這是一個關聯式資料庫中一對多關係的例子,其中一個人可以屬於多個團隊。
Tim 提供了一個實際例子:如果有多個比賽同時進行,一個人可能是多個團隊的一部分。 這樣可以避免重複,並顯示如何使用主鍵有效地查詢資料。 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 使用 Prizes 表作為例子。 他解釋如何設置主鍵、選擇資料型別和管理空值。 他還指出,主鍵幫助 SQL 優化表的儲存和檢索。 沒有主鍵的話,SQL 會建立一個"堆",這使得查詢變慢。
自動增量 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# 程式碼連接。

