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

Jak mohu mít kontrolní omezení, které odkazuje na jinou tabulku?

Přidejte sloupec tblItem.ItemType. Tento sloupec může mít v libovolném daném řádku pouze jednu hodnotu (samozřejmě). Přidejte jedinečné omezení přes ItemID,ItemType.

Nyní trik:málokdo si to pamatuje, ale cizí klíč může odkazovat na sloupce jedinečného omezení.

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

Pokud omezíte ItemType v každé z podřízených tabulek na pevnou hodnotu, pak na daný řádek v tblItem může odkazovat pouze jedna podřízená tabulka.

Proces změny položky z dobré na špatnou se však skládá ze tří kroků:

  1. DELETE řádek z tblGoodItem
  2. UPDATE ItemType řádku v tblItem
  3. VLOŽTE řádek do tblBadItem


  1. Jak ladit dotazy MySQL/Doctrine2?

  2. Konfigurace MySQL 8

  3. Odešlete více prvků <select> pomocí jQuery POST

  4. Mysql codeigniter php asc desc pořadí podle výsledku počtu pomocí php