为什么我们在SQL Management Studio中定义关键关系?我是学生,老师想要这个。实际上我认为没有必要,因为我可以使用sql查询连接表。
例如:我们有EMPLOYEE
和MANAGER
表。
EMPLOYEE
有ID, Name, SuperID(supervisorID in MANAGER)
MANAGER
有ID, Name
实际上老师说"你应该在SQL Server管理中连接两个表,因为员工SuperID
是MANAGER
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中的外键部分) 如果我们不联系会发生什么?我们在专业公司工作时有必要吗?
答案 0 :(得分:2)
强制实施参照完整性并防止孤立记录。它告诉数据库需要知道什么,以便根据您的业务规则存储无效的数据。如果您无法存储无效数据,那么您的数据将是有效的。有效数据让每个人都满意。
如果每个EMPLOYEE
都必须有MANAGER
,那么请告诉数据库,它不会让您创建EMPLOYEE
记录,而不会MANAGER
参考。
如果需要删除MANAGER
,但您仍然有EMPLOYEE
将该ID列为MANAGER
,则数据库不会让您删除MANAGER
(或者可以告诉他也删除带有级联删除的EMPLOYEE
)。
如果MANAGER
的密钥需要更改,外键上的级联更新规则将自动自动更新任何关联的EMPLOYEE
记录。
@DeanKuga提出了一个重要观点。主要应用程序的大多数大客户将需要或需要直接数据库访问。这可能是使用第三方报告应用程序,前端无法提供的海量数据操作,或导入或导出到他们拥有的其他系统。如果我们没有联系将会发生什么?
这里有许多开发人员没有想到的事情:即使您只是将应用程序许可给您的客户,您仍然拥有该应用程序,客户拥有数据。从各方面来说,它都是他们的数据。您作为独立供应商的权利最终具有程序代码的版权和专利权。如果客户想要连接到RDBMS,他们就拥有他们拥有的服务器上的许可证来读取他们拥有的数据,这是他们的权利,他们绝对会这样做。这不是逆向工程。实际上,这种能力是使用通用RDBMS的主要和明确目的之一,也是客户喜欢它们的原因之一。他们总能得到他们的数据。客户不需要巨大的信息孤岛,阻止他们将数据移动到他们需要的地方。无论您销售它们的应用程序是什么,它几乎肯定不做所有业务需要的东西。他们将有多个应用程序,他们都需要通信才能一起工作。
答案 1 :(得分:0)
是的,进入职业选手时是必要的。实际上,当您在表中指定外键字段时,它指的是另一个键的主键,该字段将被编入索引。 SQL Server中的索引在性能方面有很大提升。 SQL Server中的索引将提高SQL Server引擎的提取性能。添加索引就像将字段值放入字典中一样,我们都知道在字典中找到一个单词比在非有序单词列表中找到它要简单得多。对于小数据而言,性能并不显着,但对于大数据而言,这是必要的,这就是为什么在进行专业时,由于我们处理大型数据库而需要外键。引用完整性是第二个原因,因为您的数据库表是某个设计的具体表示,旨在保持您的数据完整性。如果你设计一些东西并且没有把它放到位,我们为什么要设计数据库呢?使用外键,您可以确保您的设计符合您的表实现。