不同SQL表之间的关系规则
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了不同SQL表之间的关系规则相关的知识,希望对你有一定的参考价值。
我正在研究一个非常灵活的数据库设计案例,不确定如何正确地处理它或这是哪种模式。
这是一个简化版本,用于说明我遇到的问题:
实体
- 聚会
- 合同
- 伤害
关系
- 合同总是链接到一方(非常容易)
- 损害必须与当事方有关,但可以选择与合同有关
所以,最后一个关系就是这里的问题。由于我们的端点是API,因此人们可能会发送甲方的guid和与乙方链接的合同Y的guid。
那么,损害是由甲方或乙方所有的,这是不可能的。在添加损害时可以添加检查以确保Party == Contract.Party,但是感觉就像我在欺骗关系数据库。
我不确定如何调用此问题以及如何解决它。
答案
您可以在表上使用约束来强制执行此行为,因此数据库将强制执行数据完整性,并且不能插入无效值。例如,使用SQL Server,我们可以为this answer创建类似的解决方案。
CREATE FUNCTION dbo.IdMismatches()
RETURNS int
AS BEGIN RETURN (
SELECT COUNT(*)
FROM Damage d
JOIN Contract c ON d.ContractId = c.Id
WHERE d.PartyId != c.PartyId
) END
go
ALTER TABLE Shift ADD CONSTRAINT chkMismatches CHECK (dbo.IdMismatches() = 0);
我不知道您是否正在寻找这种“数据库设计”,但是我认为无法避免使用此类检查的方法。这样,至少SQL Server可以强制执行此约束。
[我还建议您仍然使用所提到的方法在服务器上检查此属性-在服务器端验证用户输入或检查商业智能属性没有问题。
以上是关于不同SQL表之间的关系规则的主要内容,如果未能解决你的问题,请参考以下文章