CREATE TABLE Parent ( ParentID int NOT NULL PRIMARY KEY,
ParentName varchar(50) NULL )
CREATE TABLE Child ( ChildID int NOT NULL PRIMARY KEY,
ParentID int NOT NULL REFERENCES Parent (ParentID),
ChildName varchar(50) NULL,
IsFavorite BIT NOT NULL )
第一个愿望是想防止无子父母的情况发生。显然,当第一次创建该对时,父对象将没有子对象,我不想阻止插入本身;但我想彻底禁止删除最后一个孩子。(出于商业原因,Parents 永远不会被删除。)
作为第二个愿望,我需要阻止多个 IsFavorite=1 的 Child,我知道我可以使用过滤的唯一索引来做到这一点。我还想劝阻没有 IsFavorite=1 的子项——即,如果这是其父项的唯一子项,则不允许设置 IsFavorite=0。(从应用程序方面来看,对于第一个孩子,插入通常应该使用 IsFavorite=1 正确完成;但我不希望数据库干扰它。)
我确定我不是第一个有这些愿望的人,但我在 dba 或 stackoverflow 上找不到匹配的问题。如果这是一个骗局,一定要把它标记为骗局,并指出我需要去的地方。