问题标签 [referential-integrity]

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 回答
2997 浏览

sql - Oracle:FK 在多个父表中引用 PK

在 Oracle 10g 中,是否可以为外键定义引用完整性约束以引用多个父表中的主键。

例如:

DEPT_AMER

DEPT_ID
10
11
12

DEPT_APAC

DEPT_ID
13
14
15

DEPT_EMEA

DEPT_ID
16
17
18

电磁脉冲

EMP_ID DEPT_ID
500 11
501 15

我希望 EMP.DEPT_ID 能够引用 DEPT_AMER、DEPT_APAC 和 DEPT_AMER 中的部门 ID 之一。有没有办法定义参照完整性来满足这种需求。所有 3 个表中的 DEPT_ID 都是从一个公共序列生成的,并且保证是唯一的。

如果引用完整性约束是不可能的,是否有更好的方法来维护这种数据完整性?

0 投票
3 回答
4155 浏览

sql - 将 Oracle 表限制为单行的简单约束

我正在寻找一种将应用程序配置表限制为 1 行的简单方法。我知道我可以使用包含子查询的虚拟列或顶部的物化视图来做到这一点,但实际上它是一个简单的表,我想要一个不需要更多行来实现而不是创建表的约束。

我想到的最简单的方法是将 ID 字段设置为 1,以及 ID 必须为 1 的检查约束 - 但这会在表中添加一个令人困惑的额外字段,所以我希望有一些明显的我遗漏的东西,就像一个检查约束,其中 UNIQUE_FIELD = MAX(UNIQUE_FIELD),这是不允许的。

0 投票
1 回答
576 浏览

nhibernate - SQLite 与 NHibernate 结合是否支持参照完整性/外键?

我已经阅读了一些关于 NHibernate with SQLite 的内容,认为当我需要轻量级数据库处理时它可能是一个非常好的选择。

我已经阅读了以下(和链接),其中讨论了 NHibernate SQLite 方言如何在创建数据库时不支持外键,因为 NHibernate 通过ALTER TABLE创建外键。

我想知道,如果我通过其他工具创建一个 SQLite 数据库,我能否将 NHibernate 与所述 SQLite 数据库一起使用,它会尊重参照完整性吗?

使用 SQlite 数据库启用 nHIbernate 的引用完整性

0 投票
3 回答
1472 浏览

database - 数据冗余

参照完整性约束能否帮助解决数据冗余问题?

0 投票
1 回答
77 浏览

ruby-on-rails - 管理 Rails ActiveRecord 关联的正确方法是什么?

我是 Rails 新手,所以请多多包涵……</p>

我正在尝试创建一组与 2 个不同模型相关的数据。我目前有以下型号:

在系统中,用户可以创建多个Us和Ss。但是在创建 M 时,应确保存在对“u”和“s”的引用。

我知道我可以做到以下几点:

哪个有所有适当的参考,有没有更好的方法?

0 投票
9 回答
8111 浏览

sql - 保持参照完整性——好还是坏?

我们计划在我们的数据库中引入简单的审计跟踪,为需要审计的每个表使用触发器和单独的历史表。

例如考虑表 StudentScore,它有很少的外键(例如 StudentID、CourseID)将其链接到相应的父表(学生和课程)。

如果 StudentScore 需要审计,我们计划创建审计表 StudentScoreHistory -

如果 StudentScore 中的任何行被修改,我们会将旧行移至 StudentScoreHistory。

在设计讨论期间提出的要点之一是将 StudentHistory 表中的 StudentID 和 CourseID 设为 FK,以保持参照完整性。支持这一点的论点是因为我们总是执行软(逻辑布尔标志)删除而不是硬删除,这有助于保持引用完整性以确保我们在审计表中没有任何孤儿 ID。

这对我来说似乎有点奇怪。我同意@Jonathan Leffler 的评论,即审计记录不应停止删除父数据。相反,如果需要,应该通过主表中的外键而不是审计表中的外键来处理。我想听听你的意见,以确保我不会错过将外键扩展到审计表的一些价值。

现在我的问题是: 在历史表中包含这些外键是一个好的设计吗?

任何关于关键论点的细节(例如性能、最佳实践、设计灵活性等)都将受到高度赞赏。

为了任何寻求特定目的和我们环境的人的利益:

目的:

  1. 维护关键数据历史
  2. 允许审核用户活动并支持重新创建场景
  3. 在有限的范围内允许回滚用户活动

环境:

  • 事务数据库
  • 并非每个表都需要审核
  • 尽可能使用软删除,特别是针对静态/参考数据
  • 很少有高度事务性的表使用硬删除
0 投票
3 回答
1076 浏览

sql-server - 三向参照完整性 - SQL Server 2008

我正在使用SQL Server 2008构建一个数据库来存储在多个市场上交易的证券价格。

对于给定的市场,所有证券都有相同的假期日历。但是,假期日历因市场而异。

我想要以下四个表:MarketGoodBusinessDaySecuritySecurityPriceHistory,并且我想强制SecurityPriceHistory在交易证券的市场关闭时没有工作日的行。

表中的字段如下:

市场:MarketID (PK)、MarketName

GoodBusinessDay: MarketID (FK), SettlementDate (这对是PK)

安全性:SecurityID (PK)、MarketID (FK)、SecurityName

SecurityPriceHistory:这是个问题 - 我的偏好是 SecurityID、SettlementDate、SecurityPrice

如何以这种方式定义表并保证SecurityPriceHistory中的每一行, GoodBusinessDay中都有相应的行?

如果我将MarketID列添加到SecurityPriceHistory。我可以看到如何使用两个外键(一个指向Security,一个指向GoodBusinessDay)来执行此操作,但这似乎不是正确的方法。

0 投票
1 回答
8749 浏览

mysql - zend 适配器 beginTransaction() 和 commit() 失败

我面临一个奇怪的问题

Zend_DB_Adapter 的 beginTrasaction() 和 commit() 方法似乎没有按预期工作。我在 beginTrasaction() 和 commit() 方法中包含 INSERT 语句(在 FOR LOOP 中)。但是,即使发生如下错误,我仍然看到已经插入了一些行,而我希望由于发生错误而不会发生提交。我无法理解为什么。有人可以帮忙吗。谢谢。

SQLSTATE [23000]:违反完整性约束:1062 键 'PRIMARY' 的重复条目 '0'

代码块如:

0 投票
1 回答
1647 浏览

mysql - MYSQL 多次连接表

我有一个表,有几行事件,每个事件都有(在许多其他字段中)addedbyuser,, 有editedbyuser,并且将表返回给特定用户。我能够毫无问题地加入其中一个字段(例如),我如何加入其余字段并在 php 中引用它们?deletedbyuserINTusersaddedbyuser

事件表:

用户表:

所以基本上,我想显示谁添加、编辑和删除了文章的名称,我可以在一个 SQL 查询中做到这一点吗?

0 投票
4 回答
8092 浏览

sql - SQL Server:如何知道是否有任何行正在引用要删除的行

如果任何行通过 FK 引用要删除的行,则无法删除该行。

是否有可能在执行 DELETE 语句之前知道是否有任何行正在引用要删除的行?