Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Как да имам ограничение за проверка, което препраща към друга таблица?

Добавете колона tblItem.ItemType колона. Тази колона може да има само една стойност на даден ред (очевидно). Добавете уникално ограничение върху ItemID, ItemType.

Сега трикът:малко хора си спомнят това, но външен ключ може да препраща към колоните на уникално ограничение.

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) 
);

Ако ограничите ItemType във всяка от дъщерните таблици до фиксирана стойност, тогава даден ред в tblItem може да бъде препратен само от една дъщерна таблица.

Това обаче е процес в три стъпки за промяна на елемент от добър на лош:

  1. ИЗТРИВАНЕ на ред от tblGoodItem
  2. АКТУАЛИЗИРАНЕ на ItemType на реда в tblItem
  3. ВМЪКНЕТЕ ред в 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. Вземете пространствени точки в радиус с помощта на NHibernate Spatial

  2. Как да намерите местоположението на файловете с данни и регистрационните файлове в SQL Server

  3. Как да извлечете имена на полета от временна таблица (SQL Server 2008)

  4. Как да създадете последователност в SQL Server 2008

  5. Как да получите последния ден от миналата седмица в sql?