Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Jak uzyskać ograniczenie sprawdzające, które odnosi się do innej tabeli?

Dodaj kolumnę tblItem.ItemType. Ta kolumna może mieć tylko jedną wartość w danym wierszu (oczywiście). Dodaj unikalne ograniczenie dla ItemID,ItemType.

Teraz trik:niewiele osób to pamięta, ale klucz obcy może odwoływać się do kolumn unikalnego ograniczenia.

CREATE TABLE tblItem (
  ItemID INT PRIMARY KEY,
  ItemType CHAR(1),
  UNIQUE KEY (ItemID, ItemType)
);

CREATE TABLE tblGoodItem (
  ItemID INT PRIMARY KEY,
  ItemType CHAR(1),
  CHECK (ItemType='G')
  FOREIGN KEY (ItemID, ItemType) REFERENCES tblItem(ItemID, ItemType) 
);

CREATE TABLE tblBadItem (
  ItemID INT PRIMARY KEY
  ItemType CHAR(1),
  CHECK (ItemType='B')
  FOREIGN KEY (ItemID, ItemType) REFERENCES tblItem(ItemID, ItemType) 
);

Jeśli ograniczysz ItemType w każdej tabeli podrzędnej do stałej wartości, do danego wiersza w tblItem może odwoływać się tylko jedna tabela podrzędna.

Jest to trzyetapowy proces zmiany elementu z dobrego na zły:

  1. USUŃ wiersz z tblGoodItem
  2. AKTUALIZUJ typ elementu wiersza w tblItem
  3. WSTAW wiersz w tblBadItem


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cofnąć zmiany z dziennika transakcji w SQL Server 2008 R2?

  2. Popraw escaping rozdzielanych identyfikatorów w SQL Server bez użycia QUOTENAME

  3. Brak udostępnionych zestawów danych w eksploratorze rozwiązań w studiu rozwoju analizy biznesowej

  4. Jak działa funkcja REPLICATE() w SQL Server (T-SQL)

  5. Jak wyłączyć ograniczenia dla wszystkich tabel i włączyć je?