এসকিউএল তে বৈদ্যুতিক স্কিম্যাটিক মডেলিং করতে আমি কিছুটা সমস্যায় পড়লাম। কাঠামোটি আমি ক্যাপচার করতে চাই
part ←────────── pin
↑ ↑
part_inst ←───── pin_inst
যেখানে "ইনস্ট্যান্স" "উদাহরণ" এর জন্য সংক্ষিপ্ত।
উদাহরণস্বরূপ, আমার কাছে part
একটি এলএম 358 অপ-অ্যাম্প হিসাবে pin
এস 1OUT, 1IN-, 1IN +, GND, 2IN +, 2IN-, 2 আউট এবং ভি সিসি থাকতে পারে । আমি তখন এই অংশটি একটি স্কিম্যাটিকের উপর রেখে একটি part_inst
এবং 8
pin_inst
টি তৈরি করতে পারি ।
ডেটা ক্ষেত্রগুলি উপেক্ষা করে স্কিমাতে আমার প্রথম চেষ্টা ছিল
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)
প্রাথমিক কী হিসাবে ব্যবহার করতে পারেন ।