sql >> Databasteknik >  >> RDS >> Sqlserver

Hur har jag en kontrollbegränsning som hänvisar till en annan tabell?

Lägg till en kolumn tblItem.ItemType. Denna kolumn kan bara ha ett värde på en given rad (uppenbarligen). Lägg till en unik begränsning över ItemID,ItemType.

Nu är tricket:få människor kommer ihåg detta, men en främmande nyckel kan referera till kolumnerna i en unik begränsning.

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

Om du begränsar ItemType i var och en av de underordnade tabellerna till ett fast värde, kan en given rad i tblItem endast refereras av en underordnad tabell.

Det är en process i tre steg att ändra ett objekt från bra till dåligt:

  1. RADERA rad från tblGoodItem
  2. UPPDATERA radens ItemType i tblItem
  3. INSERT rad i tblBadItem


  1. Skalskript för att köra pgsql-kommandon i filer

  2. Skriver ett reserverat ord i mysql

  3. Mysql:Hitta poster från specifik dag med hjälp av tidsstämpelkolumnen

  4. Testdriven utveckling för att kontrollera databasfrågor involverade metoder