Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

एकाधिक तालिकाओं के लिए विदेशी कुंजी

आपके पास कुछ विकल्प हैं, सभी "शुद्धता" और उपयोग में आसानी में भिन्न हैं। हमेशा की तरह, सही डिज़ाइन आपकी ज़रूरतों पर निर्भर करता है।

  • आप बस टिकट में दो कॉलम बना सकते हैं, OwnerdByUserId और OwnerdByGroupId, और प्रत्येक टेबल पर अशक्त विदेशी कुंजी रख सकते हैं।

  • आप टिकट:उपयोगकर्ता और टिकट:समूह संबंध दोनों को सक्षम करने के लिए एम:एम संदर्भ तालिका बना सकते हैं। शायद भविष्य में आप एक ही टिकट को एकाधिक उपयोगकर्ताओं या समूहों के स्वामित्व की अनुमति देना चाहेंगे? यह डिज़ाइन यह लागू नहीं करता है कि एक टिकट जरूरी केवल एक इकाई के स्वामित्व में हो।

  • आप प्रत्येक उपयोगकर्ता के लिए एक डिफ़ॉल्ट समूह बना सकते हैं और टिकट केवल एक सच्चे समूह या उपयोगकर्ता के डिफ़ॉल्ट समूह के स्वामित्व में हो सकते हैं।

  • या (मेरी पसंद) एक ऐसी इकाई को मॉडल करें जो उपयोगकर्ताओं और समूहों दोनों के लिए आधार के रूप में कार्य करती है, और उस इकाई के स्वामित्व वाले टिकट हैं।

आपके पोस्ट किए गए स्कीमा का उपयोग करके एक मोटा उदाहरण यहां दिया गया है:

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. DAY() SQL सर्वर में उदाहरण (T-SQL)

  2. छवियों को एक varbinary (अधिकतम) कॉलम में कैसे स्टोर करें?

  3. सेलेक्ट स्टेटमेंट में Sum, Avg और काउंट का उपयोग कैसे करें - SQL सर्वर / TSQL ट्यूटोरियल पार्ट 128

  4. प्रभावित तालिका SQL लॉग करने के लिए ट्रिगर बनाएं?

  5. T-SQL का उपयोग करके SQL सर्वर डेटाबेस के पुनर्प्राप्ति मॉडल को कैसे बदलें