sql >> Database >  >> RDS >> Sqlserver

Hoe kan ik een controlebeperking hebben die naar een andere tabel verwijst?

Voeg een kolom tblItem.ItemType toe. Deze kolom kan slechts één waarde hebben op een bepaalde rij (uiteraard). Voeg een unieke beperking toe aan ItemID,ItemType.

Nu de truc:weinig mensen onthouden dit, maar een externe sleutel kan verwijzen naar de kolommen van een unieke beperking.

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

Als u ItemType in elk van de onderliggende tabellen beperkt tot een vaste waarde, kan er slechts door één onderliggende tabel naar een bepaalde rij in tblItem worden verwezen.

Het is echter een proces van drie stappen om een ​​item van goed naar slecht te veranderen:

  1. VERWIJDER rij uit tblGoodItem
  2. UPDATE rij ItemType in tblItem
  3. INSERT rij in tblBadItem


  1. Oracle ODP.NET versie agnostisch alternatief

  2. Hoe voorloop- en volgspaties in SQL Server te verwijderen – TRIM()

  3. RPAD() Functie in Oracle

  4. Een lijstitem vinden op een opgegeven positie in SQL Server