问题标签 [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.
database - SQL2005:将一个表链接到多个表并保持参考完整性?
这是我的数据库的简化:
然后我们有其他表分别与Quote和Job表相关。
我现在需要添加一个Message表,用户可以在其中记录客户留下的关于 Jobs 和 Quotes 的电话消息。
我可以创建两个相同的表(QuoteMessage和JobMessage),但这违反了 DRY 原则并且看起来很混乱。
我可以创建一个消息表:
但这阻止了我使用约束来强制执行我的参照完整性。我还可以预见它会在以后使用 Linq to SQL 与开发方面产生问题。
这个问题是否有一个优雅的解决方案,或者我最终将不得不一起破解一些东西?
伯恩斯
database - 外键有什么问题?
我记得在播客 014中听到Joel Spolsky提到他几乎没有使用过外键(如果我没记错的话)。但是,对我来说,它们对于避免整个数据库中的重复和后续数据完整性问题似乎非常重要。
人们是否有充分的理由说明原因(以避免根据堆栈溢出原则进行讨论)?
postgresql - 如何检查我是否只删除了所需的数据?
我有一个非常大的数据库(在 PostgreSQL 上运行),其中包含许多具有复杂关系的表(外键、删除级联等)。我需要从多个表中删除一些数据,但我不确定由于级联删除而真正从数据库中删除的数据量。
如何检查我不会删除不应删除的数据?
我有一个测试数据库 - 只是真实数据库的副本,我可以在其中做我想做的事:)
我唯一的想法是前后转储数据库并检查它。但是看起来不太舒服。另一个想法 - 转储数据库的一部分,正如我认为的那样,它不应该受到我的 DELETE 语句的影响,并在数据删除之前和之后检查这部分。但我认为没有简单的方法可以做到这一点(有数百个表,删除应该与其中的 10 个一起使用)。有什么办法吗?
任何其他想法如何解决这个问题?
postgresql - 如何在 Postgres 8.2 中禁用参照完整性?
谷歌关于这个的结果有点薄,但表明这并不容易。
我的具体问题是我需要重新编号两个相互关联的表中的 ID,以便表 B 中有一个“table_a_id”列。我不能先重新编号表 A,因为 B 中的子代指向旧 ID。我不能先重新编号表 B,因为它们会在创建之前指向新的 ID。现在重复三到四张桌子。
当我可以“开始事务;禁用 ref 完整性;整理 ID;重新启用 ref 完整性;提交事务”时,我真的不想摆弄个人关系。Mysql 和 MSSQL 都提供此功能 IIRC,所以如果 Postgres 没有,我会感到惊讶。
谢谢!
ddl - 保持参照完整性
给定架构:
和业务规则:
可以将排序计划分配给相同 machine_type 的任何机器。
如何在 SCHEDULE 中强制执行machine和sort_plan引用的元组具有相同的machine_type?
如有必要,可以更改架构。
sql - 排除物料清单样式关系中的空值
给定架构
其中 PERSON.spouse 是 PERSON.name 的外键,当一个人未婚或我们没有任何信息时,NULL 是必要的。
带着反对空值的论点,在这种情况下你如何避免它们?
我有一个备用架构
其中 SPOUSE.name* 是 PERSON 的 FK。我在这里看到的问题是,没有办法确保某人只有一个配偶(即使有所有可能的 UNIQUE 限制,也有可能有两个配偶)。
在物料清单样式关系中排除空值的最佳方法是什么?
mysql - MySQL外键允许NULL?
我正在拼凑一个图像网站。基本架构非常简单的 MySQL,但我在尝试表示与图像关联的可能管理标志时遇到了一些麻烦(“不适当”、“受版权保护”等)。我目前的想法如下:
(为了便于阅读而被截断;我发誓,各种外键和索引都是有序的)
tblImageFlags.flagTypeID
在标志类型的查找表上是外键的,你可以想象tblImageFlags.resolutionTypeID
应该是外键的luResolutionTypes.resolutionTypeID
. 手头的问题是,当第一次发出标志时,没有逻辑解析类型(我会声明这是一个很好的用途NULL
);但是,如果设置了一个值,它应该是查找表的外键。
我找不到针对这种情况的 MySQL 语法解决方法。它存在吗?最好的亚军是:
- 添加“无节制”分辨率类型
- 添加一个
NULL
条目luResolutionTypes.resolutionTypeID
(这甚至可以在AUTO_INCREMENT
列中工作吗?)
感谢您的洞察力!
PS Bonus 指向谁告诉我,在数据库的情况下,它是“索引”还是“索引”。
跟进:感谢 Bill Karwin 指出表结构中的语法错误(NOT NULL
如果您希望允许,请不要将列设置为NULL
!)。一旦我有足够的业力给你这些奖励积分,我会:)
php - 用需要相互引用的记录填充两个表的最佳方法是什么?
在两个表中填充记录的最佳方法是什么,每个表都需要引用另一个表的主键?
我的想法是在它们之间有一个“链接”表,一旦两者都写入数据库或通过以下复杂的命令系列填充
在连接到 mySQL 数据库并保持完整性的同时,您将如何在 PHP 中执行此操作?
您是否需要使用事务,如果需要,您将如何进行?
database - 您如何确定数据库表关系是否值得强制执行参照完整性?
我有一个应用程序,其中大多数数据库表与另一个表有很强的关系。目前我正在使用外键强制执行参照完整性,但我想知道这是否真的是最好的方法。业务用户可以从管理界面删除主表中的数据,这意味着必须执行级联删除(或编写多个删除语句),但我不确定我是否真的要删除所有其他数据同时。可能有很多数据*可能*在以后有用(可能报告?)。但是,除非与主表存在关系,否则从表中的数据对应用程序本身来说基本上是无用的。
referential-integrity - 破坏的参照完整性:埃德加科德会说什么?
我试图理解 Edgar Codd 在 1970 年最初定义的关系模型规则。
具体来说,我对参照完整性是否是他的关系模型的一部分感兴趣。我将尝试在以下示例中进行演示(只是为了使这个问题变得漂亮):
顾客
发票
现在,显然如您所见,我们有一张客户(外键)为Mary的发票。这会违反他的关系模型吗?Edgar Codd 会不会看着这个说,哎呀,这到底是怎么回事?或者他会说,这完全没问题……
这是理论上的问题。