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

बाधा को लागू करने वाले पेयरिंग के लिए डेटाबेस डिजाइन

मुझे नहीं पता कि यह पोस्टग्रेस पर काम कर सकता है या नहीं, लेकिन यहाँ एक SQL सर्वर समाधान है:

CREATE TABLE dbo.Teams(TeamID INT NOT NULL PRIMARY KEY);
GO
CREATE TABLE dbo.Players(PlayerID INT NOT NULL PRIMARY KEY,
  TeamID INT NOT NULL FOREIGN KEY REFERENCES dbo.Teams(TeamID),
  NumberInTeam INT NOT NULL CHECK(NumberInTeam IN (1,2)),
  TeamMateID INT NOT NULL,
  TeamMatesNumberInTeam INT NOT NULL,
-- if NumberInTeam=1 then TeamMatesNumberInTeam must be 2
-- and vise versa
  CHECK(NumberInTeam+TeamMatesNumberInTeam = 3), 
  UNIQUE(TeamID, NumberInTeam),
  UNIQUE(PlayerID, TeamID, NumberInTeam),
  FOREIGN KEY(TeamMateID, TeamID, TeamMatesNumberInTeam)
    REFERENCES dbo.Players(PlayerID, TeamID, NumberInTeam)
);

INSERT INTO dbo.Teams(TeamID) SELECT 1 UNION ALL SELECT 2;
GO

-- आप केवल पूर्ण जोड़ियों में खिलाड़ियों को सम्मिलित कर सकते हैं

INSERT INTO dbo.Players(PlayerID, TeamID, NumberInTeam, TeamMateID, TeamMatesNumberInTeam)
SELECT 1,1,1,2,2 UNION ALL
SELECT 2,1,2,1,1;

आप किसी एकल खिलाड़ी को सम्मिलित करने, या किसी खिलाड़ी को टीम से हटाने, या प्रति टीम दो से अधिक खिलाड़ियों को सम्मिलित करने का प्रयास कर सकते हैं - बाधाओं के एक पूर्ण सेट के कारण सभी विफल हो जाएंगे।

नोट:SQL सर्वर में अभ्यास सभी बाधाओं को स्पष्ट रूप से नाम देना है। मैंने अपनी बाधाओं का नाम केवल उस स्थिति में नहीं बताया, जो पोस्टग्रेज़ के अनुकूल नहीं है।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Postgres में संग्रहीत jsonb डेटा की संरचना को कैसे बदलें

  2. django प्रोजेक्ट के लिए postgreSQL डेटाबेस सेट करने में समस्याएँ

  3. plpgsql फ़ंक्शन में इनपुट सरणी के तत्वों से मेल खाने वाली पंक्तियाँ लौटाएँ

  4. 'ऐरे पुश' के लिए एरे एपेंड और ऐरे लंबाई को पोस्टग्रेज करता है

  5. पोस्टग्रेज डेटाटाइम से सेकंड कैसे घटाएं?