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

MySQL - सशर्त विदेशी कुंजी बाधाएं

आप एक ऐसा डिज़ाइन करने का प्रयास कर रहे हैं जिसे बहुरूपी संघ . कहा जाता है . यही है, विदेशी कुंजी कई संबंधित तालिकाओं में पंक्तियों को संदर्भित कर सकती है।

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

टिप्पणियों द्वारा संदर्भित एक प्रकार का "सुपरटेबल" बनाना एक बेहतर समाधान है।

CREATE TABLE Commentable (
  id SERIAL PRIMARY KEY
);

CREATE TABLE Comments (
  comment_id SERIAL PRIMARY KEY,
  foreign_id INT NOT NULL,
  ...
  FOREIGN KEY (foreign_id) REFERENCES Commentable(id)
);

आपके प्रत्येक सामग्री प्रकार को इस सुपरटेबल का उपप्रकार माना जाएगा। यह एक इंटरफ़ेस . की वस्तु-उन्मुख अवधारणा के अनुरूप है ।

CREATE TABLE BlogPosts (
  blogpost_id INT PRIMARY KEY, -- notice this is not auto-generated
  ...
  FOREIGN KEY (blogpost_id) REFERENCES Commentable(id)
);

CREATE TABLE UserPictures (
  userpicture_id INT PRIMARY KEY, -- notice this is not auto-generated
  ...
  FOREIGN KEY (userpicture_id) REFERENCES Commentable(id)
);

इससे पहले कि आप BlogPosts . में एक पंक्ति सम्मिलित कर सकें या UserPictures , आपको Commentable . में एक नई पंक्ति डालनी होगी एक नई स्यूडोकी आईडी उत्पन्न करने के लिए। जब आप संबंधित उप-प्रकार तालिका में सामग्री सम्मिलित करते हैं तो आप उस उत्पन्न आईडी का उपयोग कर सकते हैं।

एक बार जब आप यह सब कर लेते हैं, तो आप संदर्भात्मक अखंडता बाधाओं पर भरोसा कर सकते हैं।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL ट्यूटोरियल - MySQL सर्वर लॉग का प्रबंधन:घुमाएँ, संपीड़ित करें, बनाए रखें और हटाएं

  2. MySQL में कॉलम में कुछ मानों में अग्रणी शून्य जोड़ना

  3. Ubuntu 14.04 पर MySQL स्थापित करें

  4. डे () उदाहरण – MySQL

  5. mysql संग्रहीत कार्यविधि जो स्वयं को पुनरावर्ती रूप से कॉल करती है