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

Kunci Asing ke beberapa tabel

Anda memiliki beberapa opsi, semuanya bervariasi dalam "kebenaran" dan kemudahan penggunaan. Seperti biasa, desain yang tepat bergantung pada kebutuhan Anda.

  • Anda cukup membuat dua kolom di Ticket, OwnedByUserId dan OwnedByGroupId, dan memiliki Kunci Asing yang dapat dibatalkan untuk setiap tabel.

  • Anda dapat membuat tabel referensi M:M yang memungkinkan hubungan tiket:pengguna dan tiket:grup. Mungkin di masa mendatang Anda ingin mengizinkan satu tiket dimiliki oleh banyak pengguna atau grup? Desain ini tidak memaksakan bahwa tiket harus dimiliki oleh satu entitas saja.

  • Anda dapat membuat grup default untuk setiap pengguna dan memiliki tiket yang hanya dimiliki oleh Grup sebenarnya atau Grup default Pengguna.

  • Atau (pilihan saya) memodelkan entitas yang bertindak sebagai basis untuk Pengguna dan Grup, dan memiliki tiket yang dimiliki oleh entitas tersebut.

Berikut contoh kasar menggunakan skema yang Anda posting:

create table dbo.PartyType
(   
    PartyTypeId tinyint primary key,
    PartyTypeName varchar(10)
)

insert into dbo.PartyType
    values(1, 'User'), (2, 'Group');


create table dbo.Party
(
    PartyId int identity(1,1) primary key,
    PartyTypeId tinyint references dbo.PartyType(PartyTypeId),
    unique (PartyId, PartyTypeId)
)

CREATE TABLE dbo.[Group]
(
    ID int primary key,
    Name varchar(50) NOT NULL,
    PartyTypeId as cast(2 as tinyint) persisted,
    foreign key (ID, PartyTypeId) references Party(PartyId, PartyTypeID)
)  

CREATE TABLE dbo.[User]
(
    ID int primary key,
    Name varchar(50) NOT NULL,
    PartyTypeId as cast(1 as tinyint) persisted,
    foreign key (ID, PartyTypeId) references Party(PartyID, PartyTypeID)
)

CREATE TABLE dbo.Ticket
(
    ID int primary key,
    [Owner] int NOT NULL references dbo.Party(PartyId),
    [Subject] varchar(50) NULL
)


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Klausa WHERE pada tipe data Teks SQL Server

  2. Dukungan Spotlight Cloud untuk Pengumuman Azure SQL DB (Pratinjau)

  3. Terjadi kesalahan terkait jaringan atau spesifik contoh saat membuat sambungan ke SQL Server

  4. Antarmuka Jaringan SQL Server:String koneksi tidak valid [87]

  5. Berapa karakter maksimum untuk NVARCHAR(MAX)?