নেস্টেড ভিউ একটি ভাল ডাটাবেস ডিজাইন আছে?


42

আমি অনেক আগে কোথাও পড়েছি। বইটিতে বলা হয়েছে যে এসকিউএল সার্ভারে আমাদের নেস্টেড ভিউ থাকার অনুমতি দেওয়া উচিত নয়। আমি নিশ্চিত না যে কারণ আমরা তা করতে পারি না বা ভুল বিবৃতিটি মনে থাকতে পারে।

শিক্ষার্থীরা

SELECT studentID, first_name, last_name, SchoolID, ... FROM students

CREATE VIEW vw_eligible_student
AS 
SELECT * FROM students
WHERE enroll_this_year = 1

শিক্ষক

SELECT TeacherID, first_name, last_name, SchoolID, ... FROM teachers

CREATE VIEW vw_eligible_teacher
AS 
SELECT * FROM teachers
WHERE HasCert = 1 AND enroll_this_year = 1

শিক্ষক

CREATE VIEW vw_eligible_school
AS 
SELECT TOP 100 PERCENT SchoolID, school_name 

FROM schools sh 
JOIN
     vw_eligible_student s 
     ON s.SchoolID = sh.SchoolID
JOIN 
     vw_eligible_teacher t
     ON s.SchoolID = t.SchoolID

আমার কর্মক্ষেত্রে, আমি আমাদের ইন-হাউস ডাটাবেসের অ্যাপ্লিকেশনটি তদন্ত করেছি। আমি দেখতে পেলাম যে সমস্ত বস্তুর মধ্যে দুটি বা তিনটি স্তর রয়েছে একে অপরের সাথে স্ট্যাক করেছিলাম through সুতরাং এটি অতীতে যা পড়েছিলাম তা সম্পর্কে মনে করিয়ে দেওয়া হয়েছিল। কেউ এটি ব্যাখ্যা করতে সাহায্য করতে পারে?

যদি এটি করা ঠিক না হয় তবে আমি জানতে চাই যে এটি কেবল এসকিউএল সার্ভারের মধ্যে সীমাবদ্ধ বা এটি সাধারণভাবে ডাটাবেস ডিজাইনের জন্য।

অতিরিক্ত তথ্য: আমি আমার সংস্থার একটি উদাহরণ আপডেট করেছি। আমি অনেকগুলি প্রযুক্তিগত (এই উদাহরণে খুব বেশি কলাম) ছাড়াই আরও সাধারণ হয়ে কিছুটা পরিবর্তন করেছি। বেশিরভাগ নেস্টেড ভিউ আমরা ব্যবহার করি বিমূর্ত বা একত্রিত ভিউয়ের উপর ভিত্তি করে। উদাহরণস্বরূপ, শত শত কলাম সহ আমাদের একটি বৃহত শিক্ষার্থীর টেবিল রয়েছে। বলুন, Eligible Student Viewএই বছর যারা ভর্তি হন তাদের উপর ভিত্তি করে। এবং শিক্ষার্থীর যোগ্য দর্শন স্টোর-পদ্ধতিতে অন্য জায়গা ব্যবহার করতে পারে।


3
আমি জমা দেব যে নির্দিষ্ট প্ল্যাটফর্ম নির্বিশেষে একই উপকারিতা এবং সমষ্টি মোটামুটি সমান হবে।
অ্যারন বারট্রান্ড

উত্তর:


47

প্ল্যাটফর্ম নির্বিশেষে, নিম্নলিখিত মন্তব্যগুলি প্রযোজ্য।

(-) নেস্টেড মতামত:

  • বুঝতে এবং ডিবাগ করা কঠিন

    উদাহরণস্বরূপ এই দেখার কলামটি কোন টেবিল কলামটি উল্লেখ করে? লেমমে ভিউ সংজ্ঞাগুলির 4 স্তরের মাধ্যমে খনন করুন ...

  • ক্যোয়ারী অপ্টিমাইজারের পক্ষে সবচেয়ে দক্ষ ক্যোয়ারী প্ল্যান নিয়ে আসা আরও শক্ত করে তুলুন

    দেখুন এই , এই , এই , এবং এই অকল্পনীয় প্রমাণ জন্য। তুলনা এই , যা দেখায় যে অপটিমাইজার প্রায়ই সঠিকভাবে আনপ্যাক নেস্টেড মতামত স্মার্ট যথেষ্ট এবং একটি অনুকূল পরিকল্পনা নির্বাচন, কিন্তু না একটি সঙ্কলন খরচ ছাড়াই।

    বেস টেবিলগুলির বিপরীতে লিখিত সমমানের সাথে ভিউ ক্যোয়ারির তুলনা করে আপনি পারফরম্যান্সের ব্যয়টি পরিমাপ করতে পারবেন।

(+) অন্যদিকে নেস্টেড মতামত আপনাকে দেয়:

  • একীকরণ বা ব্যবসায়ের নিয়মকে কেন্দ্রিয়করণ এবং পুনরায় ব্যবহার করুন
  • আপনার অন্তর্নিহিত কাঠামোটি বিমূর্ত করুন (বলুন, অন্যান্য ডাটাবেস বিকাশকারীদের কাছ থেকে)

আমি খুঁজে পেয়েছি যে এগুলি খুব কমই প্রয়োজনীয়।


আপনার উদাহরণে আপনি নির্দিষ্ট ব্যবসায়ের সংজ্ঞাটি কেন্দ্রীভূত করতে এবং পুনরায় ব্যবহার করতে নেস্টেড ভিউগুলি ব্যবহার করছেন (উদাঃ "একজন যোগ্য শিক্ষার্থী কী?")। নেস্টেড দর্শনগুলির জন্য এটি একটি বৈধ ব্যবহার। আপনি যদি এই ডেটাবেসটি বজায় রাখছেন বা সুর করছেন, এগুলি অপসারণের তুলনায় এগুলি রাখার ব্যয়টি বিবেচনা করুন।

  • রাখুন: নেস্টেড মতামতগুলি রেখে আপনি উপরে বর্ণিত সুবিধা এবং অসুবিধাগুলি ব্যয় করে।

  • সরান: নেস্টেড ভিউগুলি সরাতে:

    1. আপনার ভিউগুলির সমস্ত উপস্থিতিগুলি তাদের বেস ক্যোয়ারীগুলির সাথে প্রতিস্থাপন করতে হবে।

    2. আপনার যদি যোগ্য শিক্ষার্থী / শিক্ষক / বিদ্যালয়ের আপনার সংজ্ঞা পরিবর্তিত হয় তবে কেবলমাত্র প্রাসঙ্গিক দর্শন সংজ্ঞাটি আপডেট করার বিপরীতে আপনাকে অবশ্যই সমস্ত প্রাসঙ্গিক ক্যোয়ারী আপডেট করতে হবে।


1
+1, ব্যতীত আমি "প্রায় অসম্ভব" দিয়ে ক্যোয়ারী অপ্টিমাইজারের জন্য "শক্ত" প্রতিস্থাপন করব। :)
জেসন

1
@ জেসন - আমি সম্মত, এবং আমি আশা করি আমি কিছু কংক্রিট উদাহরণের সাথে লিঙ্ক করতে পারি। আপনি এমন কোনও রেফারেন্স সম্পর্কে জানেন যা ব্যাখ্যা বা প্রদর্শন করে যে এটি কেন এমন?
নিক চ্যামাস

1
আমি যা পাই তা হ'ল উপাখ্যান্য প্রমাণ যা নেস্টেড ভিউগুলি ব্যবহার করা হয়, তখন তারা "সমতল" এসকিউএল এর তুলনায় পারফরম্যান্স সমস্যায় ভোগে। sqlservercentral.com/blogs/2cents/archive/2010/04/05/… সমস্যাটি এই বিষয়টি অবতীর্ণ হয়েছে যে ডিবি (এই ক্ষেত্রে এসকিউএল সার্ভার) সারণিতে যোগদানের আগে নির্দিষ্ট ফিল্টার প্রয়োগ করবে না এবং তাই হবে ক্যোয়ারীটিকে তার চেয়ে বেশি সময় নিতে হবে।
জেসন

7
আমি ক্যোয়ারী অপ্টিমাইজার ইস্যুতে একমত নই, কারণ সমস্ত মতামত সমাধানের পরে প্রাপ্ত ফলাফলটি যেভাবেই দেখা হবে তা কতগুলি দৃষ্টিভঙ্গি রূপান্তরিত হোক না কেন (ইন্টারমিডিয়েট রেজাল্ট সেটে কিছু অতিরিক্ত কলাম ব্যতীত, যা অপ্টিমাইজার কেবল জরিমানা দূর করতে পারে)। এটি ডিবাগিং ছেড়ে দেয়; আইএমও এটি ডিবাগিংকে নেস্টেড ভিউগুলি করা আরও সহজ করে তোলে কারণ আমি মধ্যবর্তী ফলাফলগুলিতে এটি কোথায় ভুল হয়ে গেছে তা দেখতে পারি।
সাইমন রিখটার

1
আমি একটি এম্বেড থাকা ডাটাবেস সার্ভার লিখেছি এবং আমার কাছে, প্রথমে মতামত সমাধান করা এবং তারপরে ফলাফলের ক্যোয়ারীটি অনুকূল করা হ'ল সুস্পষ্ট রুট, কারণ দর্শনে সমস্ত প্রশ্নের সমস্ত কলাম ফিরে আসবে এটি আসলেই যথেষ্ট সম্ভাবনা। আমি কোয়েরির মাঝখানে ভিউ ডেটা উপলব্ধি করে কিছু অর্জন করবে কেন এমন একটি কারণও আমি ভাবতে পারি না, তাই এটি ছিল আমার পক্ষে বুদ্ধিমান।
সাইমন রিখটার

26

কখনও কখনও পুনরাবৃত্তি সমষ্টিগুলি রোধ করতে নেস্টেড ভিউগুলি ব্যবহার করা হয়। ধরা যাক আপনার কাছে এমন একটি মতামত রয়েছে যা বার্তাগুলিকে গণ্য করে এবং সেগুলি ব্যবহারকারীদের দ্বারা গোষ্ঠীভুক্ত করে, আপনার পক্ষে এমন একটি ভিউ থাকতে পারে যা ব্যবহারকারীর সংখ্যাকে> 100 বার্তা, এই জাতীয় জিনিস গণনা করে nts এটি সবচেয়ে কার্যকর যখন বেস ভিউটি একটি সূচকযুক্ত ভিউ হয় - আপনি অল্প কিছু আলাদা গ্রুপিংয়ের সাথে ডেটা উপস্থাপন করার জন্য আরও একটি সূচী দৃষ্টিভঙ্গি তৈরি করতে চান না, কারণ এখন আপনি সূচক রক্ষণাবেক্ষণের জন্য দু'বার প্রদান করছেন যেখানে পারফরম্যান্স সম্ভবত মূল মতামতের বিরুদ্ধে যথেষ্ট।

এইগুলি যদি আপনি স্রেফ নেস্টেড ভিউ হয় যেখানে আপনি সিলেক্ট করছেন * তবে ক্রম বা শীর্ষ পরিবর্তন করছেন তবে মনে হচ্ছে এটি নেস্টেড ভিউগুলির একগুচ্ছের চেয়ে পরামিতিগুলির (বা ইনলাইন টেবিলের মূল্যবান ফাংশন) সহ একটি সঞ্চিত পদ্ধতি হিসাবে ভাল enc এই প্রোগ্রামটিতে।


4
"বেস ভিউটি সূচকযুক্ত ভিউ হলে এটি সবচেয়ে কার্যকর হয়।" গুরুত্বপূর্ণ পয়েন্ট.
নিক চ্যামাস

7

এসকিউএল (2005+) এর পরবর্তী সংস্করণগুলি দর্শনগুলির ব্যবহারের অনুকূলকরণে আরও ভাল বলে মনে হচ্ছে। ব্যবসায়ের নিয়ম একীকরণের জন্য দর্শনগুলি সেরা। EG: আমি যেখানে কাজ করি আমাদের কাছে একটি টেলিকম পণ্য ডেটাবেস আছে। প্রতিটি পণ্য একটি রেটপ্ল্যানে বরাদ্দ করা হয়, এবং সেই রেটপ্ল্যানটি সরে যেতে পারে, এবং হার বাড়ানো বা সংশোধিত হওয়ার সাথে সাথে রেটপ্ল্যানের হারগুলি সক্রিয় / ডিএসিটিভেটেড হতে পারে।

এটি সহজ করার জন্য, আমরা নেস্টেড ভিউ করতে পারি। 1 ম দৃশ্যটি কেবলমাত্র টেবিলগুলির প্রয়োজন হয় তা ব্যবহার করে তাদের হারের সাথে রেটপ্ল্যানে যোগ দেয় এবং পরবর্তী স্তরের দর্শনের জন্য প্রয়োজনীয় কোনও ডেটা ফিরিয়ে দেওয়া উচিত। ২ য় দর্শন (গুলি) কেবলমাত্র সক্রিয় রেটপ্ল্যান এবং তাদের সক্রিয় হারগুলি পৃথক করতে পারে। অথবা, কেবল গ্রাহকের হার। বা কর্মচারীর হার (কর্মচারীদের ছাড়ের জন্য)। বা ব্যবসায় বনাম আবাসিক গ্রাহকের হার। (রেটপ্ল্যানগুলি জটিল হতে পারে)। মুল বক্তব্যটি হ'ল ফাউন্ডেশন ভিউটি রেটপ্ল্যানসের জন্য আমাদের সামগ্রিক ব্যবসায়ের যুক্তি নিশ্চিত করে এবং রেটগুলি এক জায়গায় সঠিকভাবে যোগদান করেছে। পরবর্তী স্তরগুলির দর্শনগুলি আমাদের নির্দিষ্ট হারের পরিকল্পনাগুলিতে (ধরণের, সক্রিয় / নিষ্ক্রিয় ইত্যাদি) আরও ফোকাস দেয়।

আমি সম্মত হই যে আপনি একই সময়ে কোয়েরি এবং দর্শনগুলি তৈরি করা হলে দর্শনগুলি ডিবাগিংকে অগোছালো করতে পারে। তবে, আপনি যদি একটি চেষ্টা করা- n- বিশ্বাসযোগ্য দৃশ্য ব্যবহার করেন, এটি ডিবাগিংকে আরও সহজ করে তোলে। আপনি জানেন যে ভিউটি ইতিমধ্যে রিংারের মধ্য দিয়ে চলেছে, তাই আপনি জানেন যে সম্ভবত এটি সমস্যার কারণ নয়।

যদিও আপনার মতামত নিয়ে ইস্যুগুলি আসতে পারে। "কোনও পণ্য যদি কেবলমাত্র নিষ্ক্রিয় রেটপ্ল্যানের সাথে যুক্ত হয় তবে কী হবে?" বা "যদি কোনও রেটপ্ল্যানে কেবলমাত্র নিষ্ক্রিয় হার থাকে তবে কী হবে?" ঠিক আছে, এটি যুক্তি দিয়ে ফ্রন্ট-এন্ড স্তরে ধরা পড়তে পারে যা ব্যবহারকারীর ত্রুটিগুলি ধরা দেয়। "ত্রুটি, পণ্যটি একটি নিষ্ক্রিয় রেটপ্ল্যানে রয়েছে ... দয়া করে সংশোধন করুন"। আমরা বিলিংয়ের আগে রান ডাবল পরীক্ষা করার জন্য কোয়েরি অডিটগুলিও চালাতে পারি। (সমস্ত পরিকল্পনা নির্বাচন করুন এবং সক্রিয় রেটপ্ল্যান ভিউতে বাম যোগদান করুন, কেবলমাত্র এমন পরিকল্পনাগুলি প্রত্যাবর্তন করুন যা সমস্যা সমাধানের প্রয়োজন হিসাবে একটি সক্রিয় রেটপ্ল্যান না পেয়ে থাকে)।

এ সম্পর্কে ভাল বিষয় হল দর্শনগুলি আপনাকে রিপোর্টিং, বিলিং ইত্যাদির জন্য প্রশ্নগুলি যথেষ্ট পরিমাণে কমিয়ে দিতে দেয় আপনার গ্রাহক অ্যাকাউন্ট ভিউ থাকতে পারে, তবে কেবল সক্রিয় গ্রাহকদের দ্বিতীয় স্তরের ভিউ view গ্রাহক ঠিকানার ভিউ সহ এমন দল। টিম যা পণ্য (গুলি) এর দর্শন সহ (গ্রাহকের কী পণ্য (এর সাথে যোগ দিয়েছে)। দল (টি) এর রেটপ্ল্যান দেখার জন্য to এমন টিম যা পণ্য বৈশিষ্ট্যগুলি দেখায়। অখণ্ডতা নিশ্চিত করতে প্রতিটি পরীক্ষা-দেখুন-দেখুন, দেখুন, দেখুন n দর্শনগুলি ব্যবহার করে আপনার শেষ প্রশ্নটি খুব কমপ্যাক্ট।

সম্পাদনা:

কেবলমাত্র টেবিলগুলির একটি সমতল ক্যোয়ারির চেয়ে ভিউটি আরও ভাল হত তার উদাহরণ হিসাবে ... আমাদের কিছু পরিবর্তন করার জন্য একটি অস্থায়ী ঠিকাদার এসেছিল। তারা তাকে বলেছিল যে জিনিসগুলির জন্য মতামত রয়েছে, কিন্তু তিনি তার সমস্ত প্রশ্নের সমতল করার সিদ্ধান্ত নিয়েছেন। বিলিং তার কিছু প্রশ্নের বাইরে কাজ চালিয়ে যাচ্ছিল। তারা জিনিসগুলিতে একাধিক রেটপ্ল্যান এবং রেট পেতে থাকে। দেখা যাচ্ছে যে তার অনুসন্ধানগুলি কেবলমাত্র হারগুলি বিলের অনুমতি দেওয়ার জন্য মাপদণ্ড অনুপস্থিত ছিল যদি সেগুলি শুরু করার ও শেষ তারিখের মধ্যে থাকে তবে যে হারের পরিকল্পনার সময় সেই হারগুলি / সেই হারগুলি ব্যবহার করার কথা ছিল। উফ। যদি তিনি এই দৃষ্টিভঙ্গিটি ব্যবহার করে থাকেন তবে এটি ইতিমধ্যে সেই যুক্তিটিকে বিবেচনায় নিয়েছে।

মূলত, আপনাকে পারফরম্যান্স বনাম স্যানিটি করতে হবে। কোনও ডাটাবেসের কর্মক্ষমতা বাড়ানোর জন্য আপনি সব ধরণের অভিনব স্টাফ করতে পারেন। তবে, যদি এর অর্থ এটি হয় যে কোনও নতুন ব্যক্তির পক্ষে এটি নেওয়া / রক্ষণাবেক্ষণ করা দুঃস্বপ্ন হয়, তবে এটি কি সত্যই মূল্যবান? তাদের যুক্তি পরিবর্তন করার জন্য প্রয়োজনীয় সমস্ত প্রশ্নের সন্ধান করা (এবং তাকে ভুলে যাওয়া / চর্বিযুক্ত আঙ্গুল দিয়ে ঝুঁকিপূর্ণ করা) খ / সি সিদ্ধান্ত নিয়েছে যে কোনও ব্যক্তির মতামতগুলি "খারাপ" এবং নতুন ব্যক্তির জন্য যে তৃপ্তি-তিলটি বাজানো সত্যই মূল্যবান? এমন কিছু মূল ব্যবসায়ের যুক্তিটিকে একীভূত করেনি যা 100 এর অন্যান্য প্রশ্নের মধ্যে ব্যবহার করতে পারে? এটি সত্যিই আপনার ব্যবসা এবং আপনার আইটি / আইএস / ডিবি দলের উপর নির্ভর করে। তবে, আমি পারফরম্যান্সের তুলনায় স্বচ্ছতা এবং একক উত্স একীকরণ পছন্দ করব।


4

আসল বিষয়টি তাদের মধ্যে নেস্টেড মতামত নয়। আসল ইস্যুটি হ'ল নেস্টেড ভিউগুলি প্রসারিত হিসাবে বিকাশকারীরা বিদ্যমান ভিউগুলিতে অতিরিক্ত টুইটগুলি স্তরিত করে। আমি নেস্টেড ভিউ 4 এর সাথে এমন কোয়েরি খুঁজে পেয়েছি যা প্রকৃতপক্ষে এর সংজ্ঞাতে একটি ভিউতে যুক্ত হয়েছিল। কোনও সমস্যা বিশ্লেষণ ও সমাধানের পরিবর্তে সহজ উপায় গ্রহণের আমাদের প্রবণতাই ইস্যুটির মূল।


0

আমার পরিবেশে, আমরা প্রোডাকশন সার্ভার থেকে রিপোর্টস সার্ভারে প্রচুর টেবিলগুলি প্রতিলিপি করি। প্রতিবেদক সার্ভারে আমাদের কাছে প্রচুর মতামত রয়েছে যা প্রতিলিপিযুক্ত উত্পাদন টেবিলের উপর ভিত্তি করে নেস্ট করা হয়। প্রতিলিপি শুরু হওয়ার আগে, প্রতিলিপিটি সম্ভব করার জন্য আমাদের সমস্ত দৃষ্টিভঙ্গি সরিয়ে ফেলতে হবে (আমরা ড্রপ ব্যবহার করি এবং তৈরি করি কারণ টেবিলের কাঠামো প্রায়শই উত্পাদন পরিবর্তিত হয়)। প্রতিলিপি শেষ হওয়ার পরে, আমাদের সমস্ত মতামত পুনর্নির্মাণ করতে হবে।

এখন এখানে মজাদার অংশ: অনেকগুলি মতামত নেস্টেড হওয়ার কারণে, আমাদের সেগুলি একটি নির্দিষ্ট ক্রমে পুনর্নির্মাণ করতে হবে। ভিউ সংজ্ঞাটিতে কোনও পরিবর্তন করার সময় আমাদের অবশ্যই পুনর্নির্মাণের সঠিক ক্রমটি মনোযোগ দিতে হবে। এটা মোট জগাখিচুড়ি। নেস্টেড ভিউগুলি ব্যবহার করে আমি দৃ strongly়ভাবে নিরুৎসাহিত করব যদি আপনি প্রতিলিপি ব্যবহার করেন বা কেবল আপনার টেবিলগুলি ড্রপ এবং পুনর্নির্মাণ করেন, এটি দর্শনের উত্স।

পারফরম্যান্স আরেকটি জিনিস। অন্যান্য মতামতের ভিত্তিতে দেখা ভিউগুলি কার্যকর করার জন্য একাধিক প্রশ্ন ছাড়া আর কিছুই নয় nothing বৃহত্তর ক্যোয়ারী একসাথে রাখা, একটি কাজ তৈরি করা এবং এটির বাইরে একটি টেবিল তৈরি করা সহজ। কর্মক্ষমতা আরও সহজ এবং উন্নত করে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.