2011-11-03 7 views
13

मैं SQLite के लिए नहीं बल्कि स्टाइल शांत BNF व्याकरण पढ़ा है बनाने तालिका बयानSQLite समग्र कुंजी (2 विदेशी कुंजी) लिंक तालिका

मिली: http://www.sqlite.org/lang_createtable.html

मैं सोच रहा था कि कैसे मैं था इन

के बीच एक लिंक तालिका बनाने के बारे में जाएं मेरे पास एक टेबल है, कहें, घर और अन्य इलेक्ट्रिक_इटम्स।

मैं घर_आईडी और item_id को समग्र कुंजी के रूप में रखने के लिए एक लिंक तालिका बनाना चाहता हूं, लेकिन मुझे यकीन नहीं है कि मैं इसे करने के बारे में कैसे जाऊंगा, यह प्राथमिक कुंजी होने की अनुमति नहीं देता है एक विदेशी कुंजी?

एन.बी मुझे एक तीसरा क्षेत्र चाहिए pap_tested जो घर में बिजली की वस्तु को तारीख में संग्रहीत करता है, इसलिए इस प्राथमिक तालिका को समग्र प्राथमिक कुंजी के माध्यम से सबसे अच्छा तरीका लगता है।

उत्तर

27

इनमें से या तो अपने संघ तालिका के लिए काम करना चाहिए:

create table house_items (
    house_id integer not null, 
    item_id integer not null, 
    foreign key (house_id) references houses(id), 
    foreign key (item_id) references electrical_items(id), 
    primary key (house_id, item_id) 
) 

create table house_items (
    house_id integer not null references houses(id), 
    item_id integer not null references electrical_items(id), 
    primary key (house_id, item_id) 
) 

आप शायद separate (single column) indexes on house_items.house_id and house_items.item_id चाहते रूप में अच्छी तरह करेंगे।

+0

लिंक मुझे नहीं लगता कि इसके बाद होने यह लागू होता है के रूप में house_id है घर की प्राथमिक कुंजी और वस्तुओं की item_id। – Luke

1

प्राथमिक कुंजी के बारे में कोई प्रतिबंध नहीं है, उन डिज़ाइनों के लिए एक विदेशी कुंजी भी नहीं है, जिनके लिए इस तरह के संबंध की आवश्यकता होती है। आपकी समस्या उन लोगों में से एक नहीं है, हालांकि, लिंकिंग तालिका में प्राकृतिक प्राथमिक कुंजी दो स्तंभों का एक संयोजन है, प्रत्येक एक विदेशी कुंजी को अन्य तालिकाओं में से एक पर वापस ले जाती है।

+0

धन्यवाद, मुझे लगता है कि मैंने नए स्टाइल व्याकरण को गलत तरीके से पढ़ा होगा – Luke

0

मैं दो विदेशी चाबियों और अपडेट कैस्केड के विकल्प और कैस्केड को हटाकर एक टेबल बना देता हूं।

CREATE TABLE category_subcategory 
(
category_subcategory_id INTEGER PRIMARY KEY, 
category_id    INTEGER NOT NULL, 
subcategory_id   INTEGER NOT NULL, 
FOREIGN KEY(category_id) REFERENCES categories(id) ON DELETE CASCADE ON 
UPDATE CASCADE, 
FOREIGN KEY(subcategory_id) REFERENCES subcategories(subcategory_id) ON 
DELETE CASCADE ON UPDATE CASCADE 
); 
1

बस पहले जवाब के पूरक है, यह नीचे दिए गए कोड की तरह की कमी के नाम जोड़ने के लिए, एक अच्छा अभ्यास है:

create table house_items (
    house_id integer not null, 
    item_id integer not null, 
    constraint house_items_pk primary key (house_id, item_id), 
    constraint house_items_house_fk foreign key (house_id) references houses(id), 
    constraint house_items_items_fk foreign key (item_id) references electrical_items(id));