【发布时间】:2018-12-12 10:54:24
【问题描述】:
我正在学习 C#,我正在学习 SQL 数据库,但我不确定我是否完全理解外键?
先谢谢你
【问题讨论】:
-
其他网站上有很多关于数据库、sql和外键的教程。搜索任何可用的。如果您正在寻找教程,Stackoverflow 不是搜索的正确位置。
我正在学习 C#,我正在学习 SQL 数据库,但我不确定我是否完全理解外键?
先谢谢你
【问题讨论】:
外键是另一个表的主键。它用于链接两个表。 示例:我们有 2 个表(Person & Employee)
Person 有主键:personID, 员工有主键:employeeID
员工是一个人,所以他们必须联系起来。
员工有外键:personID
因此,对于每个 Employee 都有一个与之关联的 Person(其中 Employee 中的 personID 与 Person 中的 personID 相同)。
【讨论】:
在关系数据库的上下文中,外键是一个表中的一个字段(或字段集合),它唯一地标识另一个表或同一个表的一行。简而言之,外键是在第二个表中定义的,但它指的是第一个表中的主键或唯一键。
这将我们带到主键。客户表的每一行都包含一个名为 customerNumber 的唯一键,这是该表的主键。在订单表上,我们有 orderNumber 列,它是该表的主键。
orders 表有一个通过客户编号返回到customers 表的外键链接。我们称客户编号为外键。
客户表:
customerNumber CustomerName.
1 Bob
2 Jane
订单表:
OrderNumber customerNumber Status
1 1 Shipped
2 1 Exploded
使用上面的数据,如果您想查看 bob 有哪些订单,您可以将主键作为 bobs 客户 ID,并检查订单表中包含它的所有行。这是链接两个表的外键。
【讨论】:
FOREIGN KEY 是用于将两个表链接在一起的键。
FOREIGN KEY 是一个表中的一个字段(或字段集合),它引用另一个表中的 PRIMARY KEY。
包含外键的表称为子表,包含候选键的表称为引用表或父表。
【讨论】:
您使用它将两个表链接在一起,它使您的数据完整性更好。您应该始终使用外键来链接表引用,除非您有明确的理由不这样做。
假设您有 Foobar 表和 UserId 列和 User 表和 Id 列。您使用外键将UserId 列从Foobar 表链接到User 表的Id 列。
之后,如果您有UserId 为1 的Foobar 行并尝试从User 中删除Id 列值为1 的行,您会收到错误,因为Foobar 引用了它。插入也经过验证,假设您尝试使用UserId 向Foobar 表插入行,而User 表中不存在该行,您也会收到错误消息。
【讨论】: