IRONSOFTWAREHOME

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

C# 应用程序从头到尾课 08 – SQL 数据库设计

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;
Text

他解释说分号很重要,应该在每条 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'
Text

他解释 dbo 模式是默认的,并且 SQL Server 对过程名称不区分大小写。

最后的想法

Tim 在他的视频总结道:SQL 数据库设计可能看上去很复杂,但核心概念很简单。 他鼓励观众练习和探索,并预告下一节课他将连接数据库到 C# 代码中。

Earn More by Sharing What You Love

Do you create content for developers working with .NET, C#, Java, Python, or Node.js? Turn your expertise into extra income!

Let's Stay in Touch!

Join our newsletter, you’ll get exclusive access on article updates. We value your privacy

Key in blue circle

立即获取免费的 30 天试用版密钥

Your trial license will be sent to your email address

无任何限制。100% 解锁。无需信用卡。

bullet_checked无需信用卡或创建账户无任何限制。100% 解锁。无需信用卡。
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
获取您的无义务咨询
填写下面的表格或通过sales@ironsoftware.com
您的资料将始终保密。
深受全球数百万工程师信赖
Iron Software 的客户徽标
立即获取您的免费30 天试用密钥
无需信用卡或创建账户