Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Bagaimana cara saya memiliki batasan centang yang merujuk ke tabel lain?

Tambahkan kolom tblItem.ItemType kolom. Kolom ini hanya dapat memiliki satu nilai pada setiap baris tertentu (jelas). Tambahkan batasan unik pada ItemID,ItemType.

Sekarang triknya:hanya sedikit orang yang mengingat ini, tetapi kunci asing dapat mereferensikan kolom dari batasan unik.

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

Jika Anda membatasi ItemType di setiap tabel anak ke nilai tetap, maka baris tertentu di tblItem dapat direferensikan hanya oleh satu tabel anak.

Namun, ini adalah proses tiga langkah untuk mengubah item dari baik menjadi buruk:

  1. HAPUS baris dari tblGoodItem
  2. PERBARUI Tipe Item baris di tblItem
  3. MASUKKAN baris di 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. Mengenal Beban Kerja SQL Server Anda

  2. Kembalikan Nama Login Saat Ini di SQL Server (T-SQL)

  3. Fitur Keamanan di SQL Server 2017

  4. PILIH JUMLAH(*);

  5. Baca konfigurasi .NET dari database