sql >> Databáze >  >> RDS >> Sqlserver

Jak zajistit důvěryhodnost omezení cizích klíčů?

Na základě vašich příkladů jsem také zkusil:

  • Zrušte a znovu vytvořte cizí klíč.
  • Uvolněte a znovu vytvořte stůl.

Pak jsem si všiml něčeho v příkazu:

NOT FOR REPLICATION

Zdá se, že pokud je omezení vytvořeno pomocí NOT FOR REPLICATION, není vždy důvěryhodné.

Citace z Knihy online :

Vypadá to jako IS_NOT_TRUSTED nastavení je relevantní pouze pro replikaci ovlivněno IS_NOT_FOR_REPLICATION . Myslím, že pokud je omezení vynuceno na serveru, na kterém pracujete, mělo by to být v pořádku. Tak jsem pokračoval a potvrdil to:

SELECT name, is_disabled, is_not_trusted
FROM sys.foreign_keys
WHERE name = 'FK_Product_ProductKeyId'

name                    is_disabled is_not_trusted
FK_Product_ProductKeyId 0            1

INSERT INTO dbo.Sale VALUES (2, GETDATE(), 1.00)

Msg 547, Level 16, State 0, Line 1
The INSERT statement conflicted with the FOREIGN KEY constraint "FK_Product_ProductKeyId". The conflict occurred in database "_Scratch", table "dbo.Product", column 'ProductKeyId'.
The statement has been terminated.

Pokud stále chcete vidět IS_NOT_TRUSTED = 0 pro klid stačí znovu vytvořit cizí klíč bez NOT FOR REPLICATION .

V případě, že by vás to zajímalo, ověřil jsem stejný účinek i na omezení CHECK.




  1. Sledování synchronizace replik skupiny dostupnosti

  2. Instalace MySQL for Visual Studio se nezdařila, kód chyby 1603

  3. Vysvětlení vyprázdnění vyrovnávací paměti protokolu

  4. PDO::ERRMODE_EXCEPTION nepotlačí varování