问题标签 [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 投票
2 回答
723 浏览

database - 仅用于参考完整性的单列/主键表?

也许我正在解决这个问题,但我正在为我的一个项目进行数据库设计。

我有一个带有分类列的实体,该列将实体分组为用户方便的类别。这些分类是预定义的,用户不可更改(至少这是当前的设计)。

我正在尝试决定是否应该有一个“EntityClassification”表,该表仅包含一个“Id”列作为没有其他信息的主键,以便在 Entity:Classification -> EntityClassification:Id 之间建立强制关系。

我不打算在 EntityClassification 中有一个名称/描述列,因为我目前的想法是我需要支持这些预定义名称的本地化,这将使用静态字符串表(例如下载到客户端的资源文件)来完成他们的国家/语言。真的没有任何其他数据与我想要的这个 EntityClassfication 相关联,而且一个表看起来可能有点矫枉过正?

这是针对此类问题的常见/推荐做法吗?我们使用的是 SQL Server 2008,并且没有数据库的枚举数据类型,这似乎是我真正想要实现的目标。

0 投票
2 回答
2368 浏览

mysql - 检查参照完整性中断

在我的过程中,我做了类似的事情:

现在,我需要检查此导入后的数据是否没有破坏参照完整性。我想做类似的事情

是否存在类似的命令?如果没有,怎么做这个控制?

环境:带有 InnoDB 的 MySQL v5.1.xx

谢谢

0 投票
3 回答
66 浏览

mysql - 查找数据库中缺失的数据

我需要找出一些巧妙的 MySQL 代码片段,让我可以轻松查看两个表,表中的 id(如果它们存在)或 NULL 或空(如果它们不存在)。

我有一个用户表和一个旧表,在手动比较之外,我不知道如何让它们一起出现在一个表中,以便进行比较。我希望看到的是这样的:

我知道有一种方法可以包含 NULL 或空值,但我不确定它是什么。到目前为止,这是我的异常 SQL 查询,是的,我知道在子选择中执行子选择很糟糕:

这里涉及三个表,legacy_users => migrate_map_users => users. 中间只是连接两者的m2m。legacy_users 和 users 都有一个 email 列。以及他们自己的 id 版本。

谢谢你们!

0 投票
3 回答
441 浏览

database - 我的 RDBMS 或我的应用程序应该处理数据库引用完整性吗?

外键、约束、默认值等项目应该由数据库管理系统(在本例中为 MS Sql 2005)还是应用程序处理?我听取了双方的意见,老实说,我不确定该走哪条路。

我最初打算将它构建到数据库中,但是我发现这对于我当前的数据库设计并不总是可行的。例如,某些表包含循环引用,无法使用ON UPDATE CASCADE. 我遇到的另一个问题是我们可能会使用多个数据库/服务器,并且外键约束不适用于链接服务器。

我有一些开发人员建议我在应用程序层上进行数据验证,并让数据库保持原样——一个存储数据的地方。我喜欢这个想法,但我在很多地方都读到过,最好将引用完整性构建到数据库中,以允许不通过应用程序层传递的事务。我同意这一点,尽管当我们完成时,所有数据库事务都应该通过应用程序。即使我们决定稍后构建插件,我们也使用 ObjectModel 框架,因此插入/更新/删除查询永远不需要重写。

所以我的问题是,在这种情况下,您是否仍然建议将参照完整性构建到数据库中,或者是否可以将其构建到应用程序层中?为什么?

0 投票
3 回答
1855 浏览

sql-server - 关系数据仓库中的参照完整性。这值得么?还有什么选择?

如果您必须使用 SQL Server 2008 构建符合圣经比例的关系数据仓库,您会使用外键来强制数据完整性,还是会使用其他方法?

我喜欢外键,因为你只需要把它们弄好一次,它们总是在那里保护完整性。我正在考虑禁用,加载,启用路线。

有什么想法吗?

提前致谢。

0 投票
1 回答
4241 浏览

sql-server - 具有可为空列的复合外键

在下表中,有没有办法确保 PreviousID 始终引用具有匹配 ParentID 的行中的 ID,或者,如果 ParentID 为 null,则它在引用的行中也为 null?

一个例子:

有没有办法强制执行?

更新:对于那些想知道的人,复合外键不强制执行此操作,原因如下(从MSDN复制):

FOREIGN KEY 约束可以包含空值;但是,如果复合 FOREIGN KEY 约束的任何列包含空值,则会跳过对构成 FOREIGN KEY 约束的所有值的验证。要确保验证复合 FOREIGN KEY 约束的所有值,请在所有参与列上指定 NOT NULL。

更新:如果它有助于可视化所表示的数据结构,它是一个 B 树,其中具有相同父级的节点组成一个链表。我试图强制链表中的每个“上一个”指针都指向另一个具有相同父节点的节点。在父节点为空的情况下,它应该指向另一个父节点也为空的节点。

0 投票
1 回答
545 浏览

mysql - 在 MySQL 中,如何在保持引用完整性的同时从单个表中加载多个表?

更新: “将 foreign_key_checks 设置为 1 不会触发对现有表数据的扫描。因此,不会验证在 foreign_key_checks = 0 时添加到表中的行的一致性。” 资料来源:5.1.4。服务器系统变量——foreign_key_checks——因此,关闭 foreign_key_checks 似乎不是一个选项......

需要将具有 100,000+ 条记录的单个文件中的数据加载到 MySQL 上的多个表中,维护文件/表中定义的关系;表示关系已经匹配。该解决方案应该适用于最新版本的 MySQL,并且可以使用 InnoDB 或 MyISAM 引擎。

我对这一切完全陌生,并且几乎没有自动生成 ID 和建立外键关系的经验。任何指针将不胜感激。

请参阅上面的更新说明: 我可能会补充说,不需要在实时数据库上进行更新,这意味着可以禁用外键约束,然后执行插入,再次启用约束。由于我的理解是,如果数据库的引用完整性出现问题,操作将失败。

所有方法都应该包括一些验证和回滚/清理策略,以防插入失败或无法保持引用完整性。

再次,对此完全陌生,并尽我所能提供尽可能多的信息,如果您有任何问题或要求澄清 - 请告诉我。

谢谢!


样本数据:为了更好地举例说明,假设我正在尝试加载一个文件,其中包含员工姓名、他们过去占用的办公室以及他们的职位历史记录,由选项卡分隔。

文件:

注意:单表数据库是完全规范化的(与单表一样多)——例如,在“John Smith”的情况下,只有一个 John Smith;这意味着没有会导致参照完整性冲突的重复项。

MyOffice数据库模式具有以下表:

如何使用 MySQL 将文件加载到上面的架构中为员工、办公室和职位自动生成 ID 并维护员工和办公室以及员工和职位之间的关系?

所以在这种情况下。表格应如下所示:

0 投票
1 回答
901 浏览

mysql - 第一个具有参照完整性约束的数据库——建议、反馈、错误?

TARGET_RDBMS: MySQL-5.X-InnoDB(“X”等于当前稳定版本)

背景:建立我的第一个具有真正参照完整性约束的数据库,为了获得反馈,在创建“真正的”DDL 之后,我做了一个抽象,我相信它涵盖了数据库的“感觉”;这只是大约 20 个表的 3 个表,所有表都具有参照完整性约束;我看到的唯一缺少的模式是复合键表,无论如何现在都没有要转储的数据,所以我只关注第一次迭代。

示例数据/单元测试:我不知道的一件事是如何构建一个示例数据集,该数据集将提供 100% 覆盖建模的参照完整性——并围绕该示例数据和此 DDL 构建“单元测试”:

示例 DLL:

(注意:为了清楚起见,LEGEND 和命名标准仅适用于这个示例,我从“真实”数据库中抽象出来。列名本质上是机器人,旨在使给定的含义和关系实例尽可能清晰。如果您对使用的符号系统有任何建议,请随时发表评论。我愿意接受任何建议。谢谢!)

问题:

欢迎任何关于缺失、错误或“更好”的数据库构建方法的反馈。如果您有任何问题,请发表评论——我会尽快回复。再次感谢~!

更新(1):

刚刚在 PK 中添加了“MEDIUMINT NOT NULL AUTO_INCREMENT”——不知道我是怎么把它关掉的。

0 投票
1 回答
1145 浏览

mysql - 在 MySQL 中,对于 FK,“CONSTRAINT”是做什么的?

我查看了 MySQL 5.1 文档,但仍然无法弄清楚——因为我注意到我输入到 MySQL 的代码和系统输出的代码之间存在差异。

代码示例 01 和 02 之间有什么区别,这意味着 02CONSTRAINT之前添加了FOREIGN KEY- 为什么,它是做什么的?

CODE_SAMPLE_01:

语境:

CODE_SAMPLE_02:

语境:

0 投票
2 回答
118 浏览

sql - 这是什么意思->​​“指定将定义表并保持引用完整性的 SQL 语句?”

只是在我的 SQL 考试之前浏览了一些过去的论文并遇到了这个宝石,有人可以解释一下这里问的是什么,因为它让我感到困惑。我真的不明白要问什么,以及“指定将定义表的 SQL 语句”是什么意思。

我相信,我理解参照完整性。这只是意味着如果一个值存储在一个表中,然后在另一个表中引用,则它们必须相同。

这如何适用于这个问题?

非常感谢 :)