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

Jedinečný klíč vs. jedinečný index na serveru SQL Server 2008

Jedinečné omezení je implementováno za scénou jako jedinečný index, takže nezáleží na tom, jak jej určíte. Mám tendenci to implementovat jednoduše jako:

ALTER TABLE dbo.foo ADD CONSTRAINT UQ_bar UNIQUE(bar);

Někteří lidé místo toho vytvoří jedinečný index, např.

CREATE UNIQUE INDEX IX_UQ_Bar ON dbo.foo(bar);

Rozdíl je v záměru – pokud vytváříte omezení k vynucení pravidel jedinečnosti/obchodních pravidel, vytvoříte omezení, pokud to děláte kvůli výkonu dotazu, může být logičtější vytvořit jedinečný index. Opět pod přikrývkou jde o stejnou implementaci, ale cesta, kterou se tam dostanete, může pomoci zdokumentovat váš záměr.

Myslím, že existuje několik možností, jak dodržet jak předchozí funkcionalitu Sybase, tak i standard ANSI (i když jedinečná omezení nedodržují standard na 100 %, protože umožňují pouze jednu hodnotu NULL – jedinečný index, na na druhou stranu to lze obejít přidáním WHERE klauzule (WHERE col IS NOT NULL ) na SQL Server 2008 a vyšší).



  1. Vyberte skupinu řádků, které odpovídají všem položkám v seznamu

  2. Jak upgradovat PostgreSQL z verze 9.6 na verzi 10.1 bez ztráty dat?

  3. Nelze spustit velký dynamický výběrový dotaz v uložené proceduře

  4. Jak vložit více hodnot zaškrtávacích políček do databáze