मैं एसक्यूएल में एक विद्युत योजनाबद्ध मॉडलिंग में कुछ परेशानी में भाग गया। जिस संरचना पर मैं कब्जा करना चाहता हूं, वह है
part ←────────── pin
↑ ↑
part_inst ←───── pin_inst
जहां "उदाहरण" "उदाहरण" के लिए छोटा है।
उदाहरण के लिए, मेरे पास part
LM358 op-amp के रूप में pin
s 1OUT, 1IN-, 1IN +, GND, 2IN +, 2IN-, 2OUT और V CC के साथ हो सकता है । मैं तब इस हिस्से को एक योजनाबद्ध पर रख सकता हूं, part_inst
और 8
pin_inst
s बना सकता हूं ।
डेटा फ़ील्ड को अनदेखा करना, स्कीमा में मेरा प्रारंभिक प्रयास था
create table parts (
part_id bigserial primary key
);
create table pins (
pin_id bigserial primary key,
part_id bigint not null references parts
);
create table part_insts (
part_inst_id bigserial primary key,
part_id bigint not null references parts
);
create table pin_insts (
pin_inst_id bigserial primary key,
part_inst_id bigint not null references part_insts,
pin_id bigint not null references pins
);
इस स्कीमा के साथ मुख्य समस्या यह है कि यह pin_inst
एक के part_inst
साथ बंधा हो सकता है , part_id=1
लेकिन इसकी pin
है part_id=2
।
मैं आवेदन स्तर के बजाय डेटाबेस स्तर पर इस समस्या से बचना चाहूंगा। इसलिए, मैंने इसे लागू करने के लिए अपनी प्राथमिक कुंजियों को संशोधित किया। मैंने परिवर्तित लाइनों को चिह्नित किया है --
।
create table parts (
part_id bigserial primary key
);
create table pins (
pin_id bigserial, --
part_id bigint not null references parts,
primary key (pin_id, part_id) --
);
create table part_insts (
part_inst_id bigserial, --
part_id bigint not null references parts,
primary key (part_inst_id, part_id) --
);
create table pin_insts (
pin_inst_id bigserial primary key,
part_inst_id bigint not null, --
pin_id bigint not null, --
part_id bigint not null references parts, --
foreign key (part_inst_id, part_id) references part_insts, --
foreign key (pin_id, part_id) references pins --
);
इस पद्धति के साथ मेरी पकड़ यह है कि यह प्राथमिक कुंजियों को प्रदूषित करती है: हर जगह जहां मैं एक का उल्लेख करता part_inst
हूं, मुझे दोनों part_inst_id
और पर नज़र रखने की आवश्यकता है
part_id
। वहाँ एक और तरीका है कि मैं pin_inst.part_inst.part_id = pin_inst.pin.part_id
अत्यधिक क्रिया किए बिना बाधा को लागू करने के बारे में जा सकता हूं
?
pin_inst_id
जो अतिरेक है, उसे भी दूर कर सकते हैं। आप(part_inst_id, part_id, pin_id)
प्राथमिक कुंजी के रूप में उपयोग कर सकते हैं ।