আপনার কোডে সঞ্চিত এসকিউএল কোয়েরিগুলি পরিচালনা করার সর্বোত্তম উপায়? (বা আপনার উচিত?) [বন্ধ]


13

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

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

সম্পাদনা 1 - আমি ধরে নিচ্ছি যে আপনি ইতিমধ্যে এটি মডেল স্তরে পৃথক করেছেন


3
এই প্রশ্নটি এখানে অবশ্যই যথাযথ - কোড সংস্থা: '[কেন] উত্তরগুলি অনুপ্রাণিত করে যা "কেন" এবং "কীভাবে" ব্যাখ্যা করে।' এবং প্রজা 'নকশা নিদর্শন' এবং (থেকে 'আর্কিটেকচার' হল faq )
মাইকেল কে

1
আমি এই একই প্রশ্ন জিজ্ঞাসা করতে চলেছিলাম। আমি আশা করি এখানে আরও উত্তর ছিল।
মাইকেল ক্রিস্টোফিক

উত্তর:


10

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

আমি যেমন এটি দেখছি, ডেটা পড়া, তথ্য প্রক্রিয়াকরণ করা, ডেটা লেখা, ডেটা অনুসন্ধান করা ... এগুলি সব একই রকম ক্রিয়াকলাপ এবং একই জায়গায় সেরা রাখা হয়েছে।

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

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

GetValue(SQL, [transaction], [array_of_params])
GetRow(SQL, [transaction], [array_of_params])
GetRowList(SQL, [transaction], [array_of_params])
GetValueList(SQL, [transaction], [array_of_params])
Execute(SQL, [transaction], [array_of_params])

এগুলি (মোটামুটিভাবে) প্রধান ফাংশন কলগুলি যেটি আমি নিশ্চিত করি যে এটি আমার "সংযোগের অবজেক্ট" এর অংশ। এটি ভাষার উপর নির্ভর করে, আপনি আসলে যা প্রয়োগ করেন তবে আমার বক্তব্য এটি সত্যই, সত্যই সরল এবং বেদনাদায়ক রাখতে to

সংক্ষেপে, এসকিউএলকে প্রোগ্রামিংয়ের আদি অংশ হিসাবে বিবেচনা করুন এবং বিমূর্ততার জন্য বিমূর্তি করবেন না।


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

1
"বিমূর্ততার জন্য বিমূর্তি করবেন না" - ভাল কথা। আরও বোধগম্য কোডের জন্য বিমূর্ততা।
জেসন বেকার

'আর একটি টিপ আসলে একটি ভাল ডাটাবেস ক্যোয়ারী পদ্ধতি থাকা': আমি অবশ্যই একমত। ব্যবসায়ের যুক্তি পরিবর্তিত হয় যখন কোড সংশোধন করার জন্য কেবলমাত্র এক জায়গা আছে এটি অনেক সাহায্য করে।
মাইকেল কে

1
আপনি এসকিউএল কোথায় রাখবেন? এটি কি প্রয়োগে সংকলিত হয়ে উপরের পদ্ধতিগুলি ব্যবহার করে প্রেরণ করা হয়েছে?
জননি

জেসন বেকারের উত্তরে ওপির মন্তব্যের ভিত্তিতে, "বিশালাকার এসকিউএল ক্যোয়ারির ব্যারেলটি নিচে রেখে ...", এসকিউএল পাঠ্যের বৃহত ব্লকগুলি পড়ার সমস্যাটি কীভাবে এই সমস্যার সমাধান করবে?
জেফো

0

সাধারণত, একটি পৃথক মডেল স্তর থাকা সর্বোত্তম পন্থা। এখানে অনেকগুলি এন্টারপ্রাইজ ডিজাইনের নিদর্শন রয়েছে যা এটি স্থপতি করার উপায় দেয় ways


দুঃখিত, আমার আরও সুনির্দিষ্ট হওয়া উচিত ছিল ... আমি ইতিমধ্যে ধরে নিচ্ছি যে আপনি তাদের একটি মডেল স্তরে আলাদা করেছেন। তবে একটি মডেল স্তর এসকিউএল কোড দিয়ে এখনও বেশ ছড়িয়ে ছিটিয়ে যেতে পারে। হতে পারে এটি অনিবার্য। মডেল কোডে যে অন্য জিনিসটি আমাকে ছাড়িয়ে যায় তা হ'ল এমন কোড যা কিছু যুক্তির উপর ভিত্তি করে "একটি এসকিউএল কোয়েরি তৈরি করে" ... সম্ভবত এটি তার নিজস্ব কারখানায় বা কোনও কিছুর মধ্যে আলাদা করা উচিত ...
জেলিফিশ্ট্রি

2
@ জেলিফিশত্রী - আমি ভয় করি যে সমস্যাটি তখন কী তা আমি বুঝতে পারি না। মানে, আপনার ভয় কি আপনার মডেল স্তরটি খুব বেশি মডেল কোডের সাথে শেষ হতে পারে?
জেসন বেকার

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

0

আপনার মডেল স্তরটিকে 3 টি সাব-লেয়ার - "সত্তা", "সংগ্রহস্থল" এবং "পরিষেবা" - তে পৃথক করা ভাল ধারণা হতে পারে। এটি আপনাকে উদ্বেগের বিচ্ছেদ দেবে এবং আপনার ব্যবসায়িক যুক্তি বাদ দিয়ে এসকিউএল এক জায়গায় সংগ্রহ করবে।

এই দৃশ্যে জটিল এসকিউএল সহ সমস্ত ডেটা পুনরুদ্ধার কোড - সংগ্রহস্থলগুলিতে অবস্থিত। সুতরাং সংগ্রহের লক্ষ্য হ'ল স্ব-ব্যাখ্যামূলক পদ্ধতির পিছনে জটিল এসকিউএল স্টেটমেন্টগুলি গোপন করা getUsersWithActiveSubscription()

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

পরিষেবা যুক্তিটি ব্যবসার যুক্তির জন্য জায়গা। পরিষেবা ভান্ডারগুলি ব্যবহার করে সত্ত্বাগুলি পুনরুদ্ধার করে, তাদের উপর কাজ করে এবং তাদের আবার সঞ্চয় করে।

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