2011-09-13 11 views
7

मैं डेटा के एक सेट के आधार पर पंक्तियों के साथ एक नया SQLite डेटाबेस पॉप्युलेट करने की कोशिश कर रहा हूं, लेकिन मुझे डुप्लिकेट पंक्तियों से बचने में परेशानी हो रही है। मैं इसे पायथन में पूरा कर सकता हूं, लेकिन इसे संभालने के लिए SQLite में निश्चित रूप से एक डिज़ाइन विकल्प होना चाहिए।SQLite में फ़ील्ड का अद्वितीय संयोजन?

मुझे प्रत्येक पंक्ति को केवल तीन पाठ फ़ील्ड के एक अद्वितीय संयोजन के लिए मौजूद होना चाहिए। यदि मैं प्रत्येक पाठ फ़ील्ड को अद्वितीय के साथ बाध्य करता हूं, तो सभी तीन अद्वितीय होना चाहिए। लेकिन मैं तीन तारों के एक अद्वितीय संयोजन की तरह होगा।

दूसरे शब्दों में, इन रिकॉर्ड सब अस्तित्व के लिए सक्षम होना चाहिए: (एक, एक, एक) (क, क, ख) (ए, बी, बी) (ख, ख, ख)

यदि मैं सभी तीन फ़ील्ड अद्वितीय बना देता हूं और उन पंक्तियों को सम्मिलित करता हूं, केवल (ए, ए, ए) और (बी, बी, बी) डाले जाते हैं। मैं पाइथन में फ़ील्ड 1-3 को जोड़ सकता हूं और इसे प्राथमिक कुंजी के रूप में उपयोग कर सकता हूं, लेकिन यह अतिरिक्त काम की तरह लगता है।

उत्तर

19
CREATE TABLE (col1 typ 
       , col2 typ 
       , col3 typ 
       , CONSTRAINT unq UNIQUE (col1, col2, col3)) 

http://www.sqlite.org/lang_createtable.html

+0

शानदार, धन्यवाद! वे प्रवाह चार्ट मुझे मार देते हैं, लेकिन अब यह और अधिक समझ में आता है। – Thomas

2

तीन कॉलम वास्तव में प्राथमिक कुंजी हैं तो आप एक समग्र प्राथमिक कुंजी बना सकते हैं:

create table t (
    a text not null, 
    b text not null, 
    c text not null, 
    -- and whatever other columns you have... 
    primary key (a, b, c) 
) 

अपने तीन स्तंभों में से किसी शून्य हो सकता है तो आप चाहते इसके बजाय केड की अनूठी बाधा के साथ मिलना चाहते हैं।

संबंधित मुद्दे