sql >> Database teknologi >  >> RDS >> Sqlserver

Hvordan har jeg en kontrolbegrænsning, der refererer til en anden tabel?

Tilføj en kolonne tblItem.ItemType. Denne kolonne kan kun have én værdi på en given række (naturligvis). Tilføj en unik begrænsning over ItemID,ItemType.

Nu er tricket:få mennesker husker dette, men en fremmednøgle kan referere til kolonnerne 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) 
);

Hvis du begrænser ItemType i hver af de underordnede tabeller til en fast værdi, kan en given række i tblItem kun refereres af én underordnet tabel.

Det er dog en tre-trins proces at ændre en vare fra god til dårlig:

  1. SLET række fra tblGoodItem
  2. OPDATERE rækkens ItemType i tblItem
  3. INDSÆT række i tblBadItem


  1. Forespørgselsfejl med tvetydigt kolonnenavn i SQL

  2. T-SQL tirsdag #64:Én trigger eller mange?

  3. Tabellen 'performance_schema.session_variables' eksisterer ikke

  4. mysql, forespørg med til hvor kondation, hvis den ene værdi =enhver ting