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

पोस्टग्रेस्क्ल विदेशी कुंजी सिंटैक्स

इस तालिका को मानते हुए:

CREATE TABLE students 
( 
  student_id SERIAL PRIMARY KEY,
  player_name TEXT
);

विदेशी कुंजी को परिभाषित करने के चार अलग-अलग तरीके हैं (एक कॉलम पीके के साथ काम करते समय) और वे सभी एक ही विदेशी कुंजी बाधा की ओर ले जाते हैं:

  1. लक्ष्य कॉलम का उल्लेख किए बिना इनलाइन:

    CREATE TABLE tests 
    ( 
       subject_id SERIAL,
       subject_name text,
       highestStudent_id integer REFERENCES students
    );
    
  2. लक्ष्य कॉलम के उल्लेख के साथ इनलाइन:

    CREATE TABLE tests 
    ( 
       subject_id SERIAL,
       subject_name text,
       highestStudent_id integer REFERENCES students (student_id)
    );
    
  3. create table के अंदर लाइन से बाहर :

    CREATE TABLE tests 
    ( 
      subject_id SERIAL,
      subject_name text,
      highestStudent_id integer, 
      constraint fk_tests_students
         foreign key (highestStudent_id) 
         REFERENCES students (student_id)
    );
    
  4. एक अलग alter table . के रूप में कथन:

    CREATE TABLE tests 
    ( 
      subject_id SERIAL,
      subject_name text,
      highestStudent_id integer
    );
    
    alter table tests 
        add constraint fk_tests_students
        foreign key (highestStudent_id) 
        REFERENCES students (student_id);
    

आप जो पसंद करते हैं वह स्वाद का मामला है। लेकिन आपको अपनी स्क्रिप्ट में निरंतरता रखनी चाहिए। अंतिम दो कथन एकमात्र विकल्प हैं यदि आपके पास एक PK को संदर्भित करने वाली विदेशी कुंजियाँ हैं जिसमें एक से अधिक स्तंभ हैं - आप उस मामले में FK "इनलाइन" को परिभाषित नहीं कर सकते हैं, उदा। foreign key (a,b) references foo (x,y)

केवल संस्करण 3 और 4) आपको एफके बाधा के लिए अपना खुद का नाम परिभाषित करने की क्षमता देगा यदि आप पोस्टग्रेज से सिस्टम द्वारा उत्पन्न लोगों को पसंद नहीं करते हैं।

serial डेटा प्रकार वास्तव में डेटा प्रकार नहीं है। यह केवल एक संक्षिप्त हस्त संकेतन है जो अनुक्रम से लिए गए कॉलम के लिए एक डिफ़ॉल्ट मान को परिभाषित करता है। तो कोई भी कॉलम संदर्भित serial . के रूप में परिभाषित एक स्तंभ उपयुक्त आधार प्रकार integer . का उपयोग करके परिभाषित किया जाना चाहिए (या bigint bigserial के लिए कॉलम)




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. एकल पैरामीटर में एकाधिक मान पास करें

  2. आपके PostgreSQL परिनियोजन में देखने के लिए 7 चीजें

  3. PostgreSQL में एक यूनिक्स टाइमस्टैम्प को दिनांक/समय मान में कैसे बदलें

  4. पीएल/पीजीएसक्यूएल की तुलना में सी में पोस्टग्रेएसक्यूएल सरणी इतनी तेजी से क्यों पहुंचती है?

  5. मुफ्त PostgreSQL प्रचार की लागत