问题标签 [foreign-keys]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
80702 浏览

mysql - 如何在 mysql 中使用删除级联?

我有一个组件数据库。每个组件都属于特定类型。这意味着组件和类型之间存在多对一的关系。当我删除一个类型时,我想删除所有具有该类型外键的组件。但是如果我没记错的话,级联删除会在删除组件时删除类型。有什么办法可以做我描述的吗?

0 投票
5 回答
876 浏览

sql - 为什么这种外键是可能的?

为什么 SQL 标准接受这个?有哪些好处?

如果有这些表:

您可以插入它而不会出错:

注1:这来自这个答案

注意2:这可以避免,在两列上都设置不为空。

备注:我不是问避免,我感兴趣的是哪些是好处。

参考:

  • Oracle 文档关系模型允许外键的值与引用的主键或唯一键值匹配,或者为空。如果复合外键的任何列为空,则该键的非空部分不必匹配父键的任何对应部分。

  • SQL Server 文档外键约束可以包含空值;但是,如果复合 FOREIGN KEY 约束的任何列包含空值,则会跳过对构成 FOREIGN KEY 约束的所有值的验证。

0 投票
3 回答
481 浏览

sql - 复制数据并保持新 ID 的引用完整性

我需要一种工具或方法来允许传输数据并自动更新目标表中的外键。

SET IDENTITY_INSERT ON/OFF 不是我想要的。

例子:

我想创建一个这样的脚本:

插入slaves时,我想知道 master_id 的新值是什么,以保持与原始表中相同的关系。

0 投票
2 回答
641 浏览

sql - SQL中的交叉外键

我正在尝试使用 2 个带有交叉外键的表,但是在创建它们时不允许引用不存在的表。有什么方法可以为mysql创建这样的表,比如同时声明两个表或延迟外键的评估?

错误是 1005: Can't create table blocks.frm (errno 150) on a mysql 5.0

SQL:

解决问题的正确方法是什么?

0 投票
1 回答
1486 浏览

c# - 在 LINQ to SQL 中,通过外键添加时是否需要 InsertOnSubmit()?

在 LINQ to SQL 中,通过外键添加时是否需要 InsertOnSubmit()?

即,如果我有执行以下操作的代码,其中订单和订单行通过外键在 dbml 和数据库中链接:

  • 创建订单。
  • 将订单添加到数据上下文订单。
  • 创建订单行。
  • 添加到 order.Lines。

我还需要将订单行添加到 context.OrderLine 集合吗?

0 投票
5 回答
70616 浏览

django - 具有来自同一个表的 2 个外键的 Django 模型

我想要一个 Django 模型,它具有来自同一个表的 2 个外键。这是一个事件表,有 2 列供员工使用:“演员”和“接收者”。但我得到这个错误:

错误:一个或多个模型未验证:tasks.task:中间模型 TaskEvent 对 Employee 有多个外键,这是不明确且不允许的。

有没有更好的方法来建模这个?

我想我要添加一个TaskEvent_to_Employee表。其中将有两条记录,一条用于与每个 相关的两名员工中的每一个TaskEvent。有谁知道更简单的解决方法?

0 投票
7 回答
55330 浏览

mysql - 外键可以引用非唯一索引吗?

我认为外键意味着单行必须引用单行,但我正在查看一些绝对不是这种情况的表。Table1 的column1 对table2 的column2 有一个外键约束,但是table2 中有许多记录在column2 中具有相同的值。column2 上还有非唯一索引。这是什么意思?外键约束是否仅仅意味着至少一条记录必须存在正确的列中的正确值?我认为这意味着必须有一个这样的记录(不确定空值如何适合图片,但目前我不太关心这一点)。

更新:显然,这种行为是特定于 MySQL 的,这是我使用的,但我在最初的问题中没有提到它。

0 投票
8 回答
39793 浏览

sql - 我应该使用外键吗?

可能重复:
外键有什么问题?

我使用带有大约 4 GB 数据的大型数据库的 MS Sql Server。

我在网上搜索为什么我应该使用外键。到目前为止,我只索引了用于连接表的键。性能很好,数据完整性没问题。

我应该使用外键吗?我会用外键获得更多的性能吗?

0 投票
5 回答
3831 浏览

entity-framework - 实体框架:条件外键

我在数据库中有以下架构:

  • BillingReferences (ReferenceType tinyint , ReferencingId tinyint , ReferencedType tinyint , ReferencedId tinyint , IsActive bit ) - 其中所有字段(IsActive 除外)都是唯一索引的一部分。
  • BillingType (BillingTypeId tinyint , 名称varchar(50) )

ReferencingType 和 ReferencedType 是 BillingTypes 的外键。BillingTypes 包含以下行:

计费类型 ID | 姓名

1 | 标签

2 | 国家

3 | 支付提供商

4 | 付款方式

5 | 银行

ReferencedId 和 ReferencedId 表示以下实体之一的 Id(取决于引用/引用类型):

  • 银行(BankId tinyint,名称varchar(50)
  • 国家(CountryId tinyint,名称varchar(50)
  • 标签(LabelId tinyint,名称varchar(50)
  • PaymentProviders(PaymentProviderId tinyint,名称varchar(50)
  • PaymentOptions (PaymentOptionId tinyint , 名称varchar(50) )

将来每个实体都会添加更多不同的列,但现在这是简单的模式。

每个实体(国家除外)与国家之间都有(1- ) 的连接。标签与银行、PaymentProviders 和 PaymentOptions有 (1-) 的连接。并且 PaymentProviders 与 PaymentProviders 有 (1-*) 的连接

例如,如果我想将 BankId 为 201 的银行连接到 CountryId 为 3003 的国家/地区,我将在 BillingReferences 中有一条如下所示的记录:ReferencingType = 5 ReferencingId = 201 ReferencedType = 2 ReferencedId = 3003 IsActive = 1

出于可扩展性考虑,我们没有为每种类型的连接创建连接/引用表 - 如果我们想要添加另一个实体,我们所要做的就是添加它的表并在 BillingReferences 和 BillingType 中为其添加记录。

问题是我无法在 BillingReferences 和每个实体之间配置条件外键,我似乎也无法使用 EntityFramework 配置/映射它......

我找不到任何使用这种实现类型的教程或示例。我是否必须为每个连接创建一个参考表,或者有没有办法使用 EntityFramework 来配置它?

谢谢您的帮助 :)

0 投票
3 回答
8778 浏览

xsd - 在 XSD 模式中实现外键类型关系

我正试图围绕 xml 模式进行思考,而我试图弄清楚的一件事是如何在元素上引用另一个的关系类型模式,可能完全在另一个模式中。我查看了 xsd:key 和 xsd:keyref ,这似乎是我感兴趣的东西,但我不确定。最初我只是设置类型为 xs:ID abd xs:IDREF 的属性,据我所知,这显然不一定指特定元素。

基本上,我有几个不同的 xml 文件,其中元素引用同一文件或其他文件中的其他元素。它看起来很像一个关系数据库,我很想使用一个,但要求是只使用 XML 文件,所以我至少试图建立一些理智,而不是仅仅依靠 xml 注释来定义看似随机的字符串关系。它适用于较小的项目,但它肯定不可扩展。

有什么想法吗?