【问题标题】:Key relationships(Primary key, Foreign Key) in SQL Server Management StudioSQL Server Management Studio 中的键关系(主键、外键)
【发布时间】:2015-01-06 21:10:35
【问题描述】:

我们为什么要在 SQL Management Studio 中定义关键关系?我是学生,老师想要这个。其实我觉得没必要,因为我可以用sql查询连接表。 例如:我们有EMPLOYEEMANAGER 表。 EMPLOYEEID, Name, SuperID(supervisorID in MANAGER) MANAGERID, Name 其实老师说“你应该在SQL Server管理中连接两个表,因为Employee的SuperIDMANAGER的外键ID和” 我可以使用 sql 查询连接(即我可以看到两个表的连接)两个表,例如:

SELECT e.*,m.Name as 'Manager's Name' FROM EMPLOYEE e, MANAGER m 
WHERE e.SuperTC = m.TC

没关系,但为什么我们在 SQL Management Studio 中连接两个表?(SQL Management Studio 中的主键、外键部分) 如果我们不连接会发生什么?在专业公司工作有必要吗?

【问题讨论】:

  • 主要原因是无需在触发器中编写自定义查询即可启用参照完整性。一些设计师还会使用外键为您关联表格。 SQL 的结尾是一样的,但它可以省去您自己输入的麻烦和风险。
  • 而且您绝对知道您编写的查询将是访问数据的唯一方式......永远!?
  • 让您的老师向您展示当前(不是 20 岁)的加入语法。
  • IMO,这实际上取决于数据库的大小以及打算存储的数据量。如果不出意外,正如许多其他人所指出的那样,使用外键将防止孤立记录(数据库中没有与它们关联的正确数据的记录)。如果它是一个简单的数据库,那么这可能不是一个大问题。话虽如此,正确的做法是对所有关系使用外键。

标签: sql database primary-key ssms


【解决方案1】:

强制参照完整性并防止孤立记录。它告诉数据库它需要知道什么,才能根据您的业务规则存储无效的数据。如果您无法存储无效数据,那么您的数据将是有效的。有效的数据让每个人都开心。

  • 如果每个EMPLOYEE 必须有一个MANAGER,然后告诉数据库,它不会让你创建没有MANAGER 引用的EMPLOYEE 记录。

  • 1234563也删除带有级联删除的EMPLOYEE)。
  • 如果MANAGER 的键需要更改,外键上的级联更新规则将自动更新任何关联的EMPLOYEE 记录。

如果我们不连接会发生什么?

@DeanKuga 提出了一个重要的观点。大多数主要应用程序的大客户都希望或需要直接访问数据库。这可能是使用第三方报告应用程序、您的前端未提供的海量数据操作,或者导入或导出到他们拥有的其他系统。

这是很多开发人员没有想到的:即使您只是将应用程序许可给您的客户并且您仍将拥有该应用程序,客户拥有数据。这是他们的数据。您作为独立供应商的权利以程序代码的版权和专利而告终。如果客户想要连接到他们拥有的服务器上的许可以读取他们拥有的数据的 RDBMS,这是他们的权利,他们绝对会这样做。那不是逆向工程。实际上,此功能是使用通用 RDBMS 的主要目的之一,也是客户喜欢它们的原因之一。他们总能把他们的数据拿出来。客户确实想要阻止他们将数据移动到他们需要的地方的巨大信息孤岛。无论您出售的应用程序是什么,它几乎肯定不会完成业务所需的一切。他们将拥有多个应用程序,并且都需要进行通信才能协同工作。

【讨论】:

    【解决方案2】:

    是的,进入职业选手时这是必需的。实际上,当您在表中指定一个外键字段时,它将一个主键引用到另一个主键,该字段将被索引。 SQL Server 中的索引在性能上有很大的提升。 SQL Server 中的索引将提高 SQL Server 引擎的获取性能。添加索引就像将您的字段值放入字典中,我们都知道在字典中查找单词比在无序单词列表中查找要容易得多。对于小数据,性能并不显着,但对于大数据,这将是必要的,这就是为什么在专业时,外键将是必要的,因为我们正在处理大型数据库。引用完整性是第二个原因,因为您的数据库表是特定设计的具体表示,旨在保持您的数据完整性。如果你设计了一个东西但你没有把它放在适当的位置,我们为什么要设计数据库?使用外键,您可以确定您的设计符合您的表实现。

    【讨论】:

    • 默认情况下外键被索引,但是没有什么能阻止人们在需要时手动创建自己的索引。
    • @user2366842,SQL Server 不会自动在外键上创建索引。 stackoverflow.com/questions/278982/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-05
    • 2015-12-21
    • 2012-06-15
    • 1970-01-01
    • 2011-04-23
    • 1970-01-01
    相关资源
    最近更新 更多