আমি ওরাকল ডকুমেন্টেশনে কী-সংরক্ষিত টেবিলটি সম্পর্কে যোগ দর্শন বিভাগ আপডেট করে আপডেট করেছি।
যাইহোক, এটি বোঝার কোনও সহজ উপায় আমি খুঁজে পাইনি।
আমি আশা করি অফিসিয়াল ওরাকল ডকুমেন্টেশন ব্যতীত কিছু সাধারণ ধারণাগত বিবরণ পাবেন।
আমি ওরাকল ডকুমেন্টেশনে কী-সংরক্ষিত টেবিলটি সম্পর্কে যোগ দর্শন বিভাগ আপডেট করে আপডেট করেছি।
যাইহোক, এটি বোঝার কোনও সহজ উপায় আমি খুঁজে পাইনি।
আমি আশা করি অফিসিয়াল ওরাকল ডকুমেন্টেশন ব্যতীত কিছু সাধারণ ধারণাগত বিবরণ পাবেন।
উত্তর:
কী সংরক্ষণিত মানে 1 টি কী মান 1 টেবিলে যায়। পাল্টা উদাহরণ দেওয়া আপনাকে এই ধারণাটি আরও ভালভাবে বুঝতে সহায়তা করতে পারে।
Example1:
আপনার ভিউতে সমষ্টি রয়েছে। মনে করুন আপনি নীচের দেখুন কাঠামো আছে।
GroupID, AverageSalary
1 , 10000
2, 12000
3, 14000
এই উদাহরণে: আপনার মানগুলি একাধিক সারি থেকে আসে। আপনি যদি এই ভিউতে অ্যাভারেজ স্যালারি আপডেট করার চেষ্টা করেন তবে ডাটাবেসটির কাছে আপডেট করার জন্য সারিগুলির সন্ধান করার কোনও উপায় নেই।
উদাহরণ 2: আপনার ভিউ একাধিক টেবিল থেকে মান দেখায়। আপনার দর্শনগুলি PERSON এবং PERSON_CONTACT_DETAILS (আইডি, পার্সোনাইড, পরিচিতি টাইপ, পরিচিতি মূল্য) সারণী থেকে মানগুলি দেখায়।
সারি উদাহরণ:
1,1,email,ddd@example.com
1,1,phone,898-98-99
আপনি এই 2 টেবিলটিতে যোগ দিন এবং আরও ব্যবসায়িক বন্ধুত্বপূর্ণ তথ্য দেখায়।
পার্সোনআইড, নাম, শেষ নাম, ফোন 1, ইমেল 1
এখানে আপনি ফোন 1 এবং ইমেল 1 আপডেট করতে চান। তবে আপনার ব্যক্তির আইডিএস দুটি পৃথক সারিতে মানচিত্র দেয়, এই উদাহরণে আরও সারি হতে পারে। এই দৃশ্যে, আবারও, ডাটাবেসগুলির কাছে আপডেট করার জন্য WHICH সারিগুলি খুঁজে পাওয়ার কোনও উপায় নেই।
দ্রষ্টব্য: আপনি যদি নিজের ভিউ স্কুয়েলকে সীমাবদ্ধ করেন এবং এটি আপডেট করার জন্য কোন সারিগুলি কাজ করতে পারে তা পরিষ্কার করে দেয়।
এই দুটি উদাহরণ প্রথম উদাহরণ যা আমার মনে আসে। এগুলি বাড়ানো যেতে পারে। তবে ধারণাটি পরিষ্কার। ডাটাবেস 1 টি মান 1 টেবিল মান মানচিত্র প্রয়োজন। উদাহরণস্বরূপ আপনার এক থেকে এক ব্যক্তি, PERSON_DETAILS টেবিল রয়েছে। এখানে দেখার এবং আপডেটগুলি একের পর এক কাজ করে।
ডকুমেন্টেশন আপনি ইতিমধ্যে পড়েছেন বেশ ভাল এটা বলেছেন। আরও ব্যাখ্যা করতে:
যোগদানের মতামতগুলি সংশোধন করার ক্ষেত্রে বিধিনিষেধগুলি বোঝার জন্য কী-সংরক্ষিত সারণীর ধারণাটি মৌলিক।
সাধারণত একটি update
টেবিলে কাজ করে। ফিল্টারটিতে update
টর্সুয়াস সাবকিউরিগুলি এড়ানোর জন্য, ওরাকল আপনাকে যতক্ষণ না কোনও টেবিলে আসল অন্তর্নিহিত সারিগুলিতে পরিবর্তনগুলি খুব সহজে ম্যাপ করতে সক্ষম হয় ততক্ষণ আপনি দেখার (বা উপকণি) অনুমতি দেয় । set
ক্লজটি যদি একটি 'কী সংরক্ষিত' সারণীতে কেবল কলামগুলি পরিবর্তন করে তবে এটি সম্ভব :
একটি সারণী কী-সংরক্ষিত থাকে যদি টেবিলের প্রতিটি কীও যোগ দেওয়ার ফলাফলের মূল কী হতে পারে। সুতরাং, একটি কী-সংরক্ষিত সারণীতে এর কীগুলি একটি যোগদানের মাধ্যমে সংরক্ষণ করা হয়েছে।
উদাহরণ স্বরূপ:
create table foo( foo_id integer primary key, foo_val integer not null );
create table bar( bar_id integer primary key, bar_val integer not null,
foo_id integer not null references foo );
update (select * from foo join bar using(foo_id)) set foo_val=1;
ORA-01779: cannot modify a column which maps to a non key-preserved table
update (select * from foo join bar using(foo_id)) set bar_val=1;
0 rows updated.
1 ম্যাপিং: প্রথম আপডেট ব্যর্থ কারণ ওরাকল 1 কোনও উপায় নেই foo_val
করার ক্যোয়ারীতে foo_val
মধ্যে foo
1 টি মানচিত্র: বিপরীতভাবে দ্বিতীয় আপডেট সফল কারণ ওরাকল করতে 1 - bar_val
থেকে bar_val
এ bar
। গুরুত্বপূর্ণ বিষয়টি এটি foo_id
অনন্য foo
- সুতরাং প্রতিটি সারিটির জন্য bar
, কেবলমাত্র একই সংখ্যক সারি থাকতে পারে foo
(প্রকৃতপক্ষে এই উদাহরণে ঠিক 1, তবে একইটি একটি নলযুক্ত বিদেশী কীটির জন্য প্রযোজ্য - বিন্দুটি হ'ল কখনও নেই) একাধিক সারি)
আমি প্রথমে একটি উদাহরণ দেই এবং পরে এটি ব্যাখ্যা করব। 2 টি সারণী শিক্ষার্থী (টি_স্টুডেন্টস) এবং কোর্স (টি_কোর্স) বিবেচনা করুন।
- শিক্ষার্থীদের টেবিলে (বদ্ধমূল, নাম, কোর্সিড) ছাত্র আইডিতে একটি প্রাথমিক কী রয়েছে।
- কোর্স সারণীতে (কোর্সিড, কোর্সনেম) কোর্স আইডিতে একটি প্রাথমিক কী রয়েছে।
এই দুটি সারণী যখন যুক্ত হয় ->
select * from t_students S, t_course C where S.courseid=C.courseid;
ফলস্বরূপ তথ্যের মধ্যে ছাত্র সারণির মতো হুবহু সারি থাকবে। রেজাল্ট সেটে স্টাডেন্টডের কোনও সদৃশ মান থাকবে না (স্টাডেন্টড সংরক্ষিত আছে)। তবে কোর্স সারণিতে কোর্সাইডটি অনন্য হলেও, ফলাফলের সেটটিতে এটি একাধিকবার পুনরাবৃত্তি হবে, কারণ অনেক শিক্ষার্থী একই কোর্সটি বেছে নিতে পারে (অন্য কথায়, কোর্সিড সংরক্ষণ করা হয়নি)।
এই উদাহরণের জায়গায়, আপনি এই সিদ্ধান্তে আসতে পারেন যে:
- বেস টেবিলের প্রতিটি কী যোগদানের পরে ফলাফলের ডেটাগুলির চাবি হিসাবে কাজ করে (সংযুক্ত)
- বেস সারি থেকে সারিগুলি ফলাফল তথ্যগুলিতে কেবলমাত্র একবারে উপস্থিত হয় ((কোনও নকল সারি নেই)
এটি কী সংরক্ষণিত টেবিলগুলির ধারণা।
দর্শন কলামগুলি আপডেটযোগ্য কিনা তা জানতে,
select * from all_updatable_columns where table_name='V_VIEW_NAME';
PS: বড় অক্ষরে টেবিল / প্রদর্শনের নাম সরবরাহ করুন।