この方法で作成されたテーブルがあります(簡略化されています):
CREATE TABLE [dbo].[values](
[id] [uniqueidentifier] NOT NULL,
[parentId] [uniqueidentifier] NULL
)
ALTER TABLE [dbo].[values] ADD CONSTRAINT [x] FOREIGN KEY([parentId])
REFERENCES [dbo].[values] ([id])
このテーブルには3000行が含まれています。
次のクエリを実行すると:
SELECT *
FROM values
WHERE parentId IS NOT NULL
AND parentId NOT IN (SELECT id FROM values)
800件の結果が得られました。
どうしてそれも可能ですか?
データを挿入する場合、外部キーが有効であり、テーブルに見つからないparentIdを持つものを挿入することはできません。しかし、なぜすでに存在するデータが一貫性を欠くことが許されているのでしょうか?
外部キーはすでにテーブルにあるデータで追加されたと思いますが、追加された時点で、一貫性の理由で拒否されるべきではありませんでしたか?