当前位置: 首页 > 面试题库 >

SQL Server外键约束的好处

夏长卿
2023-03-14
问题内容

我们正在设计一个数据库,在该数据库中,我需要考虑一些FK(外键)约束。但它不仅限于正式的结构化和规范化。只有在它提供任何性能或可伸缩性优势的情况下,我们才会采用它。

我一直在浏览一些有趣的文章,并在谷歌搜索中获得了实际的好处。以下是一些链接:

http://www.mssqltips.com/tip.asp?tip=1296

我想更多地了解FK的好处(除了正式的结构和著名的级联delete \ update)。

  • 默认情况下,不对FK进行“索引编制”,因此在对FK编制索引时应注意哪些事项?

  • 如何处理映射为外键的可空字段-允许这样做吗?

  • 除了索引之外,这还有助于优化SQL Server中的查询执行计划吗?

我知道还有更多,但我希望专家在这方面发言。请指导我。


问题答案:
  • 外键没有提供任何性能或可伸缩性优势。
  • 外键强制引用完整性。如果有人尝试错误地从父表中删除行,则可以通过引发错误来提供实际的好处。
  • 默认情况下,不索引外键。您应该索引外键列,因为这样可以避免在删除/更新父行时对子表进行表扫描。
  • 您可以使外键列为空,然后插入null。


 类似资料:
  • mysql 5.7 外键约束 主表:部门表 从表:员工表 添加外键:从表 dep_id 关联 主表 id >[danger] CASCADE > 级联更新 主表数据更新从表会更新外键 级联删除 主表数据删除,从表会一起删除

  • 主要内容:在创建表时设置外键约束,在修改表时添加外键约束,删除外键约束MySQL外键约束(FOREIGN KEY)是表的一个特殊字段,经常与主键约束一起使用。对于两个具有关联关系的表而言,相关联字段中主键所在的表就是主表(父表),外键所在的表就是从表(子表)。 外键用来建立主表与从表的关联关系,为两个表的数据建立连接,约束两个表中数据的一致性和完整性。比如,一个水果摊,只有苹果、桃子、李子、西瓜等 4 种水果,那么,你来到水果摊要买水果就只能选择苹果、桃子、李子和西

  • 注意 当前章节中涉及的配置一般适用于关系数据库。这里展示的扩展方法在你安装了关系数据库提供程序之后就能获得(由Microsoft.EntityFrmeworkCore.Relational 程序包共享)。 外键约束是为模型中的关系引入的。 惯例 按照惯例,外键约束命名为 FK_<依赖实体类型名称>_<主实体类型名称>_<外键属性名称>。对于组合键,<外键属性名> 则为用下划线分隔的外键属性名。 数

  • 问题内容: 在事务SQL中,如何指定外键约束应为1:1关系?声明列UNIQUE是否足够?下面是我现有的代码。 问题答案: 具有UNIQUE和NOT NULL约束的外键列在另一个表中引用UNIQUE,NOT NULL列会创建1:(0 | 1)关系,这可能就是您想要的。 如果存在真正的1:1关系,则第一个表中的每个记录在第二个表中都会有一个对应的记录,反之亦然。在这种情况下,您可能只想制作一张表(除非

  • 问题内容: 我有这两张表 Table: Guards Table: Squads 该列指向表中的列,我正在尝试创建一个约束,以检查链接到作为领导者提供的保护ID的列是否为特定值(在本例中为1) 这可能吗?还是我必须使用扳机? 问题答案: 您需要添加一个约束。我将约束包装到一个函数中,因为您需要检查另一个表的值。 该函数将检查防护等级是否足够高:请确保将其设置为适当的值,或者甚至更好地从另一个表中获

  • 问题内容: 我收到此错误消息: 第40行的错误1217(23000):无法删除或更新父行:外键约束失败 …当我尝试放置桌子时: …定义如下: 有趣的是, 我已经删除 了模式中具有外键的 所有其他表。实际上,除了表外,数据库是空的。 如果数据库中没有其他对象,怎么可能会有子行?据我所知,InnoDB不允许在其他模式上使用外键,对吗? (我什至可以运行命令:-?) 问题答案: 两种可能性: 在另一个架