跳至页脚内容
Iron Academy Logo
C# 应用程序
C# 应用程序

其他类别

C# SQL数据库:通过Tim Corey的课程深入探讨

Tim Corey
1h 08m 25s

在 C# 应用程序开发的世界中,与 SQL 数据库协作是您可以学习到的最重要的技能之一。 在他的视频《C# 应用程序从头到尾课 08 – SQL 数据库设计》中,Tim Corey 讲解了设计关系数据库、创建表、定义关系以及编写存储过程的过程。

在本文中,我们将深入研究 Tim 的课程,并准确解释他所展示的想法。 如果您想更好地理解 C# 应用程序如何连接到 SQL Server 以及如何正确构建您的数据库,Tim 的视频提供了一个很好的指南。

数据库设计简介

在 1:00 时,Tim 开始提醒观众他们将在包中收到所有脚本和文件,包括数据库脚本。他强调目标不是在一节课中成为完整的 SQL Server 专家,而是理解设计以及如何考虑结构化数据。 随后 Tim 直接进入数据库图。

理解数据库图

在 1:52 时,Tim 强调了团队成员表,并解释说它不直接存储一个人的名字或姓氏。 相反,它存储一个链接回 People 表的人员 ID。 这是一个在关系数据库中的一对多关系的例子,一个人可以属于多个团队。

Tim 给出了一个实际的例子:如果多个比赛同时举行,一个人可能是多个团队的成员。 这避免了数据重复,并展示了如何使用主键帮助有效查询数据。 Tim 强调重复数据有害,因为它导致冲突信息,例如不一致的电子邮件地址。

他解释设计方法是使用 ID 而不是存储完整的重复数据。 这是良好 SQL Server 数据库设计的基础。

避免重复列

在 4:48 时,Tim 讨论了为什么应该避免将多个电子邮件地址存储在像 Email2 或 Email3 这样的单独列中。相反,他建议创建一个单独的电子邮件地址表,其中包括人员 ID 和电子邮件地址列。 这样一个人可以有多个电子邮件地址,而不会复杂化 People 表。

Tim 解释数据库设计是简单性和灵活性之间的平衡。 在本教程中,他决定只存储一个电子邮件和一个电话号码,保持设计清晰和实用。

在 SQL Server Management Studio 中创建数据库

在 6:44 时,Tim 切换到 SQL Server Management Studio,并解释他正在使用免费的 SQL Server 2016 开发者版,功能与企业版相同。 他指出它不能在生产中使用,但对于本地机器上的开发非常理想。

Tim 解释了创建 SQL Server 数据库的两种方式:通过 SSMS 对话框或使用 SQL 查询。 他更喜欢查询方法,因为它更快。 他使用的命令是:

创建数据库 tournaments;

他解释说分号很重要,应该在每条 SQL 语句的末尾使用。 在创建数据库后,Tim 展示如何刷新 SSMS 窗口以查看新数据库出现。

查看表和表设计

在 12:06 时,Tim 提到他已经通过脚本创建了所有表。然后他演示如何在 SSMS 中打开表设计器。 Tim 解释 SQL 脚本对 C# 开发者可能具有威慑力,而设计器帮助您无需记忆 SQL 语法即可直观编辑表。

Tim 以 Prizes 表为例。 他解释如何设置主键,选择数据类型,并管理空值。 他还指出主键帮助 SQL 优化表存储和检索。 没有主键时,SQL 会创建"堆",这使查询变慢。

自动递增 ID

在 15:36 时,Tim 解释如何通过身份规范使 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# 代码中。

Hero Worlddot related to C# SQL数据库:通过Tim Corey的课程深入探讨
Hero Affiliate related to C# SQL数据库:通过Tim Corey的课程深入探讨

分享您的所爱,赚取更多收入

您为使用 .NET、C#、Java、Python 或 Node.js 的开发人员创建内容吗?将您的专业知识转化为额外收入!

钢铁支援团队

我们每周 5 天,每天 24 小时在线。
聊天
电子邮件
打电话给我