জ্যাঙ্গো মডেলিংয়ের প্রশ্নের দ্বারা অনুপ্রাণিত: জাজানোতে একাধিক বহু-বহু সম্পর্কের সাথে ডেটাবেস মডেলিং । ডিবি-ডিজাইন এমন কিছু:
CREATE TABLE Book
( BookID INT NOT NULL
, BookTitle VARCHAR(200) NOT NULL
, PRIMARY KEY (BookID)
) ;
CREATE TABLE Tag
( TagID INT NOT NULL
, TagName VARCHAR(50) NOT NULL
, PRIMARY KEY (TagID)
) ;
CREATE TABLE BookTag
( BookID INT NOT NULL
, TagID INT NOT NULL
, PRIMARY KEY (BookID, TagID)
, FOREIGN KEY (BookID) REFERENCES Book (BookID)
, FOREIGN KEY (TagID) REFERENCES Tag (TagID)
) ;
CREATE TABLE Aspect
( AspectID INT NOT NULL
, AspectName VARCHAR(50) NOT NULL
, PRIMARY KEY (AspectID)
) ;
CREATE TABLE TagAspect
( TagID INT NOT NULL
, AspectID INT NOT NULL
, PRIMARY KEY (TagID, AspectID)
, FOREIGN KEY (TagID) REFERENCES Tag (TagID)
, FOREIGN KEY (AspectID) REFERENCES Aspect (AspectID)
) ;

এবং বিষয়টি হ'ল কীভাবে BookAspectRatingটেবিলটি সংজ্ঞায়িত করা যায় এবং রেফারেন্সিয়াল অখণ্ডতা প্রয়োগ করা যায়, তাই কেউ (Book, Aspect)অবৈধ সংমিশ্রণের জন্য কোনও রেটিং যুক্ত করতে পারে না ।
আফাইক, জটিল CHECKসীমাবদ্ধতা (বা ASSERTIONS) যা সাবকিউরিজগুলিতে জড়িত এবং একাধিক টেবিল, সম্ভবত এটি সমাধান করতে পারে, কোনও ডিবিএমএস-তে উপলব্ধ নয়।
আরেকটি ধারণা হ'ল (সিউডোকোড) একটি ভিউ ব্যবহার করা:
CREATE VIEW BookAspect_view
AS
SELECT DISTINCT
bt.BookId
, ta.AspectId
FROM
BookTag AS bt
JOIN
Tag AS t ON t.TagID = bt.TagID
JOIN
TagAspect AS ta ON ta.TagID = bt.TagID
WITH PRIMARY KEY (BookId, AspectId) ;
এবং একটি সারণী যা উপরের দেখুনটির জন্য একটি বিদেশী কী রয়েছে:
CREATE TABLE BookAspectRating
( BookID INT NOT NULL
, AspectID INT NOT NULL
, PersonID INT NOT NULL
, Rating INT NOT NULL
, PRIMARY KEY (BookID, AspectID, PersonID)
, FOREIGN KEY (PersonID) REFERENCES Person (PersonID)
, FOREIGN KEY (BookID, AspectID)
REFERENCES BookAspect_view (BookID, AspectID)
) ;
তিনটি প্রশ্ন:
সেখানে DBMS করে একটি (সম্ভবত রূপায়িত) অনুমতি দেয়
VIEWএকটি সঙ্গেPRIMARY KEY?সেখানে DBMS করে একটি অনুমতি দেয়
FOREIGN KEYযেREFERENCESএকটিVIEW(এবং না শুধুমাত্র একটি বেসTABLE)?এই সততা সমস্যার অন্যথায় সমাধান করা যাবে - উপলব্ধ ডিবিএমএস বৈশিষ্ট্য সহ?
ব্যাখ্যা:
যেহেতু সম্ভবত কোনও 100% সন্তোষজনক সমাধান নেই - এবং জ্যাঙ্গো প্রশ্নটি আমারও নয়! - আমি সমস্যার উপর সম্ভাব্য আক্রমণ সম্পর্কিত একটি সাধারণ কৌশল সম্পর্কে আরও আগ্রহী, বিস্তারিত সমাধান নয়। সুতরাং, "ডিবিএমএস-এক্স এ এটি টেবিল এ ট্রিগার দিয়ে করা যেতে পারে" এর মতো উত্তর পুরোপুরি গ্রহণযোগ্য।