এসকিউএল কেন আরও পুনরুদ্ধারযোগ্য নয়? [বন্ধ]


39

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

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

ধরা যাক আমার কাছে একটি প্রশ্ন রয়েছে যা রূপটি গ্রহণ করে:

select * from subQuery1 inner join subQuerry2 left join subquerry3 left join join subQuery4 

কিছু আইডি বা তারিখ ইত্যাদি ব্যবহার করা

এই সাবকিউরিগুলি নিজেরাই জটিল এবং এগুলির নিজস্ব সাবকোরি থাকতে পারে। অন্য কোনও প্রোগ্রামিং প্রসঙ্গে আমি ভাবতে পারি না যে জটিল সাব-কোয়েরিগুলি 1-4-এর জন্য যুক্তিটি আমার প্যারেন্ট ক্যোয়ারির সাথে সামঞ্জস্য করে যা তাদের সকলের সাথে যোগ দেয়। এটি এতটা সহজবোধ্য বলে মনে হচ্ছে যে sub সাবকোয়ারিগুলিকে মতামত হিসাবে সংজ্ঞায়িত করা উচিত, ঠিক তেমনই আমি যদি প্রসেসরিজ কোডটি লিখতাম তবে সেগুলি ফাংশন হবে।

তাহলে কেন সেই সাধারণ অনুশীলন হয় না? কেন লোকেরা প্রায়শই এই দীর্ঘ একতরফা এসকিউএল কোয়েরি লিখেন? প্রক্রিয়াজাত প্রোগ্রামিং যেমন বিস্তৃত ফাংশন ব্যবহারকে উত্সাহ দেয় ঠিক তেমনি এসকিউএল কেন বিস্তৃত দেখার ব্যবহারকে উত্সাহ দেয় না। (অনেক এন্টারপ্রাইজ এনভায়রনমেন্টে, ভিউগুলি তৈরি করা এমন কিছু নয় যা সহজেই হয়ে যায় There অনুরোধ এবং অনুমোদনের প্রয়োজন রয়েছে other কল্পনা করুন যে অন্য ধরণের প্রোগ্রামাররা যখন প্রতিটি সময় কোনও ফাংশন তৈরি করে তখন একটি অনুরোধ জমা দিতে হয়!)

আমি তিনটি সম্ভাব্য উত্তর সম্পর্কে চিন্তা করেছি:

  1. এটি ইতিমধ্যে সাধারণ এবং আমি অনভিজ্ঞদের সাথে কাজ করছি

  2. অভিজ্ঞ প্রোগ্রামাররা জটিল এসকিউএল লেখেন না কারণ তারা কার্যনির্বাহী কোডের সাহায্যে হার্ড ডেটা প্রক্রিয়াকরণের সমস্যাগুলি সমাধান করতে পছন্দ করেন

  3. অন্যকিছু


12
এমন সংস্থাগুলি রয়েছে যা কেবলমাত্র দেখার জন্য আপনাকে একটি ডাটাবেস জিজ্ঞাসা করতে এবং সঞ্চিত প্রক্রিয়াগুলির মাধ্যমে এটিকে সংশোধন করতে দেয়।
পিটার বি

3
এসকিউএল আমার জন্য অনেক বেশি উপভোগ্য হয়েছিল যখন আমি শেষ পর্যন্ত স্বীকার করে নিলাম যে এটি আমার স্বাভাবিক প্রক্রিয়াজাত কোড হিসাবে কখনই ডিআরওয়াই হবে না।
গ্রাহাম

1
৪. এসকিউএল সত্যই পুরানো এবং দশকগুলিতে বস্তুগতভাবে আপডেট হয়নি। সুপার জটিল জিনিসগুলির জন্য, প্রচুর দলগুলি সঞ্চিত প্রক্রিয়া পছন্দ করে। আপনি এটির জন্য বিভিন্ন ধারা যুক্ত করতে পারেন। কখনও কখনও আপনাকে কেবল একটি টেম্প টেবিলের ডেটা মঞ্চে কাজ চালাতে হয় এবং তারপরে এতে যোগ দিতে হয়। দেখুন কীভাবে বিভিন্ন ঘোষণামূলক এবং পদ্ধতিগত ভাষা হয়।
বেরিন লরিটস

8
এছাড়াও একটি কারণ হ'ল "ত্রিভুজাকার যোগ" নামক একটি ভয়াবহ পারফরম্যান্স ইস্যু রয়েছে যা আপনি যখন ভিউগুলি ব্যবহার করেন তখনই ঘটতে পারে (অবশ্যই দুর্ঘটনাক্রমে)। যদি আপনার ক্যোয়ারী এ ও দেখুন বিতে যোগ দেয় তবে এর বাস্তবায়নে দেখুন এও ভিউ বি পুনরায় ব্যবহার করে, আপনি সেই সমস্যাটি দেখতে শুরু করেন। তাই লোকেরা প্রায়শই একটি একক একক কোরিয়াকে লিখে লেখার শুরু করে যা দেখতে দেখতে রিফ্যাক্টরিংয়ের ক্ষেত্রে আসলে কী সেরা কাজ করতে পারে তা দেখতে সক্ষম হয় এবং তারপরে তাদের সময়সীমাটি হিট হয়ে যায় এবং একবাকটি উত্পাদনে যায়। সমস্ত সফ্টওয়্যার দেবের মতো 98% এর মতো, সত্যিই :) :)
স্টিফেন বাইর্ন

3
"ভাবুন যদি অন্য ধরণের প্রোগ্রামাররা প্রতিবার কোনও ফাংশন তৈরি করার সময় একটি অনুরোধ জমা দেয় তবে" ... উম্ম। আপনি কোড পর্যালোচনা করবেন না?
এসভিডজেন

উত্তর:


25

আমি মনে করি মূল সমস্যাটি হ'ল সমস্ত ডাটাবেসগুলি সাধারণ টেবিল এক্সপ্রেশন সমর্থন করে না।

আমার নিয়োগকর্তা দুর্দান্ত অনেক কিছুর জন্য DB / 2 ব্যবহার করেন। এর সর্বশেষতম সংস্করণগুলি সিটিইগুলিকে সমর্থন করে, যেমন আমি যেমন কাজ করতে সক্ষম হয়েছি:

with custs as (
    select acct# as accountNumber, cfname as firstName, clname as lastName,
    from wrdCsts
    where -- various criteria
)
, accounts as (
    select acct# as accountNumber, crBal as currentBalance
    from crzyAcctTbl
)
select firstName, lastName, currentBalance
from custs
inner join accounts on custs.accountNumber = accounts.accountNumber

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

এটি দিয়ে করা যেতে পারে:

  • ডিবি / 2
  • PostgreSQL
  • আকাশবাণী
  • এমএস এসকিউএল সার্ভার
  • মাইএসকিউএল (সর্বশেষ সংস্করণ; এখনও নতুন নতুন)
  • সম্ভবত অন্যরা

তবে কোড ক্লিনার, আরও সুস্পষ্ট, আরও ডিআরওয়াই করার দিকে এটি অনেক দীর্ঘ পথ।

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

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

দেখে মনে হবে আপনার গ্রিপের অংশটি "আমি সিটিই সম্পর্কে কেন জানি না?" বা "আমার ডিবি কেন সিটিই সমর্থন করে না?"

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

আপনি মুছে ফেলার জন্য সিটিই ব্যবহার করতে পারেন। আপনি সেই টেবিল থেকে মুছে ফেলতে চান এমন রেকর্ডগুলির জন্য পিকে / এফকে মান নির্ধারণ করতে একাধিক সিটিই লাগতে পারে। আবার আপনি যে টেবিলটি সংশোধন করছেন তা অস্পষ্ট সারণী / ক্ষেত্রের নামগুলি এড়াতে পারবেন না।

আপনি যদি কোনও sertোকানোর জন্য একটি নির্বাচন করতে পারেন, আপনি সন্নিবেশগুলির জন্য সিটিই ব্যবহার করতে পারেন। সর্বদা হিসাবে, আপনি যে টেবিলটি সংশোধন করছেন তা অস্পষ্ট সারণী / ক্ষেত্রের নামগুলি নিয়ে কাজ করছেন।

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


4
আমাদের কাছে মিঃ বিগ সিটিই লোকটি সবচেয়ে খারাপ এসকিউএল লেখার লোক হতে হয়েছিল। সমস্যাটি হ'ল সিটিইগুলি দুর্বল বিমূর্ত পছন্দ ছিল এবং অপটিমাইজারটি আপনার দেওয়া প্রতিটি হাড় মাথার অ্যালগরিদমকে পূর্বাবস্থায় ফিরিয়ে আনতে পারে না
জোশুয়া

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

2
@ জোশুয়া আপনি যে কোনও ভাষায় খারাপ কোড লিখতে পারেন। এসকিউএল সহ। তবে সিটিইগুলিতে রিফ্যাক্টরিং, সঠিকভাবে করা, নীচের অংশে নকশাগুলি তৈরি করতে পারে যা মানুষের পক্ষে পার্স করা সহজ। আমি যে ভাষাটি ব্যবহার করছি তা বিবেচনা না করেই আমি দেখতে পাওয়ার পছন্দ করি :-)
মেওয়ার 68

2
অন্যান্য উত্তরগুলি দুর্দান্ত, তবে এটি আমি ব্যক্তিগতভাবে খুঁজছিলাম। 'আমি সিটিই সম্পর্কে কেন জানি না' আমার সমস্যাটির বেশিরভাগ অংশ ছিল।
এম্বার্টস

2
@ মেওয়ার 6868 এর কি ঝুঁকি নেই যে সিটিইর ব্যাপক ব্যবহার লোককে সঠিকভাবে যোগ দিতে এবং ভাল ডাটাবেস ডিজাইন সম্পর্কে শেখার থেকে বিরত রাখে? আমি সিটিইর মানটিকে সমর্থন করি তবে এটি সাবকিউয়ের সাথে কাজ করা খুব সহজ করে তোলে, যেখানে আপনার উচিত নয়।
পিটার বি

36

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

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

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

এটি বিমূর্ততার সাথে কোডটি রিফ্যাক্টর করা সহজ হয়ে যায় কারণ একটি বিমূর্ততা সেই বিমূর্ততার গ্রাহকের কাছ থেকে প্রয়োগের বিশদটি গোপন করে। স্ট্রেট এসকিউএল এ জাতীয় কোনও বিভাজন সরবরাহ করে না, যদিও এসকিউএল যেমন ওরাকল এর জন্য পিএল / এসকিউএল বা এসকিউএল সার্ভারের জন্য লেনদেন-এসকিউএল এর পদ্ধতিগত এক্সটেনশনগুলি লাইনগুলিকে কিছুটা ঝাপসা করে শুরু করে।


"এসকিউএল কেবল কংক্রিট ডেটা স্ট্রাকচারের সাথে সম্পর্কিত, বিমূর্ত আচরণ নয় (বা শব্দের কোনও অর্থে বিমূর্তি)" " এটি একটি আশ্চর্যজনক বিবৃতি, আমার দৃষ্টিকোণ থেকে এসকিউএল পুরোপুরি বিমূর্ত আচরণ এবং শব্দের কোনও অর্থে কংক্রিট প্রোগ্রামিংয়ের সাথে সম্পর্কিত নয় ! জটিলতার সমস্ত বৃহত্তর মাত্রাগুলি কেবল বিবেচনা করুন যা সাধারণ শব্দ "JOIN" এ বিমূর্ত হয়: আপনি বলে যে আপনি দুটি পৃথক ডেটা সেট থেকে আঁকা একটি মার্জড ফলাফল চান এবং জড়িত কংক্রিট কৌশলগুলি নির্ধারণ করার জন্য এটি ডিবিএমএসে রেখে দেন, যার সাথে ডিল করেন ইনডেক্সিং, টেবিল এবং সাবকিউয়েরি ইত্যাদির মধ্যে পার্থক্য হ্যান্ডেল করুন ...
ম্যাসন হুইলার

5
@ মেসনওহিলার: আমার ধারণা, ভাষা ব্যবহারের বৈশিষ্ট্যগুলি প্রয়োগ না করে, ডেটা যেভাবে কাজ করে তার দৃষ্টিকোণ থেকে আমি এসকিউএলকে আরও ভাবছিলাম। একটি ডাটাবেসে টেবিলগুলি বিমূর্ততার মতো মনে হয় না। এগুলি কংক্রিট, যেমন "ফোন_ নাম্বার" নামে একটি সারণীতে ফোন নম্বর রয়েছে। ফোন নম্বর কোনও বিমূর্ত ধারণা নয়।
গ্রেগ বার্গার্ড্ট

12

আপনার প্রশ্ন / দৃষ্টিকোণ থেকে আপনি যে জিনিসটি হারিয়ে যেতে পারেন তা হ'ল এসকিউএল সেটগুলিতে (সেট অপারেশন ইত্যাদি ব্যবহার করে) পরিচালনা করে।

আপনি যখন সেই স্তরে অপারেট করেন আপনি স্বাভাবিকভাবেই ইঞ্জিনকে নির্দিষ্ট নিয়ন্ত্রণ ছেড়ে দিন। আপনি এখনও কার্সার ব্যবহার করে কিছু পদ্ধতিগত স্টাইল কোড জোর করতে পারেন তবে অভিজ্ঞতা হিসাবে 99/100 বার দেখায় যে আপনি এমনটি করা উচিত নয়।

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

এটি বিভিন্ন উপায়ে করা যেতে পারে। আপনি যদি মাইক্রোসফ্ট এসকিউএল সার্ভার ব্যবহার করে থাকেন তবে আপনি এসএসএমএস ব্যবহার করে আপনাকে আনুমানিক নির্বাহের পরিকল্পনা সরবরাহ করতে পারেন এবং আপনার কোডটি টিউন করতে আপনি কোন পদক্ষেপগুলি করতে পারেন তা দেখতে আপনি এটি ব্যবহার করতে পারেন।

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

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

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

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

আশা করি এটা কাজে লাগবে.


6

আমি আপনার উদাহরণে "subqueries" উপর ফোকাস করতে যাচ্ছি।

কেন তারা এত ঘন ঘন ব্যবহার করা হয়? কারণ তারা কোনও ব্যক্তির চিন্তাভাবনার প্রাকৃতিক পদ্ধতি ব্যবহার করে: আমার কাছে এই ডেটা সেট রয়েছে এবং এটির একটি উপসেটে একটি পদক্ষেপ নিতে এবং অন্যান্য ডেটার একটি উপসেটের সাথে এতে যোগদান করতে চাই। আমি 10 বারের মধ্যে 9 বার একটি সাবকোয়ারি দেখতে পেয়েছি, এটি ভুল ব্যবহৃত হয়েছে। সাবকিউরিগুলি সম্পর্কে আমার চলমান রসিকতা হল: যে লোকেরা ভয় পেয়ে থাকে তারা সাবকোয়ারি ব্যবহার করে।

আপনি যদি এই জাতীয় subqueries দেখতে পান এটি প্রায়শই অপ-অনুকূল ডেটাবেস ডিজাইনের একটি চিহ্ন।

আপনার ডেটাবেসটি যত বেশি সাধারন করা হবে, ততই আপনি যোগ পাবেন, আপনার ডাটাবেসটি একটি বৃহত্তর এক্সেল-শিটের মতো দেখায়, আপনি আরও সাবস্ক্রাইব পাবেন।

এসকিউএল-এ রিফ্যাক্টরিং প্রায়শই একটি ভিন্ন লক্ষ্য নিয়ে থাকে: আরও কর্মক্ষমতা পান, আরও ভাল ক্যোয়ারির সময় পান, "টেবিল স্ক্যানগুলি এড়ানো"। এগুলি এমনকি কোডটি কম পাঠযোগ্য হতে পারে তবে এটি অত্যন্ত মূল্যবান।

তাহলে কেন আপনি এত বিশাল একশব্দ অ-রিফ্যাক্টর ক্যোয়ারী দেখছেন?

  • এসকিউএল, বিভিন্নভাবে প্রোগ্রামিং ভাষা নয় language
  • খারাপ ডাটাবেস ডিজাইন।
  • লোকেরা এসকিউএল তে সত্যই সাবলীল নয়।
  • ডাটাবেসের উপর কোনও শক্তি নেই (উদাহরণস্বরূপ দর্শনগুলি ব্যবহার করার অনুমতি দেওয়া হচ্ছে না)
  • রিফ্যাক্টরিং সহ বিভিন্ন লক্ষ্য।

(আমার জন্য, এসকিউএল-এর সাথে আমি যত বেশি অভিজ্ঞ হব, আমার প্রশ্নগুলি তত বড় হবে, এসকিউএল-এর কাছে সমস্ত দক্ষতা স্তরের লোকদের তাদের কাজ নির্বিশেষে কীভাবে করার জন্য উপায় রয়েছে))


6
"সাবকিউরিজগুলি" ঠিক একটি
নরমালীন

@ ক্যালথ এটি সত্য true
পিটার বি

5
এমনকি ভাল স্বাভাবিক করা ডাটাবেসে এখনও প্রায়শই টেবিলের সাথে সরাসরি যোগদানের পরিবর্তে সাবকোয়রিতে যোগ দেওয়া প্রয়োজন necessary উদাহরণস্বরূপ, যদি আপনাকে গ্রুপযুক্ত ডেটাতে যোগ দিতে হয়।
বার্মার

1
@ বারমার অবশ্যই স্পষ্টভাবে, সুতরাং আমার 10 টির মধ্যে 9 মন্তব্য। সাব-কোয়েরিতে তাদের জায়গা রয়েছে তবে আমি সেগুলি অনভিজ্ঞ ব্যক্তিদের দ্বারা অতিরিক্ত ব্যবহার করা দেখছি।
পিটার বি

ডেটাবেস সাধারণকরণের ইঙ্গিত হিসাবে (বা এর অভাব) হিসাবে আমি আপনার "সাবকিউয়ের সংখ্যা" এর মেট্রিকটি পছন্দ করি।
জেসন

2

দায়িত্ব পৃথকীকরণ

এসকিউএল স্পিরিটে ডেটাবেস হ'ল একটি ভাগ করা সম্পদ যা এতে কোম্পানির ডেটা থাকে এবং এটি সুরক্ষিত করা অত্যন্ত গুরুত্বপূর্ণ। মন্দিরের অভিভাবক হিসাবে ডিবিএতে প্রবেশ করে।

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

এই সমস্ত ব্যাখ্যা করে যে ডিবিএরা কেবলমাত্র কিছু ব্যক্তিগত অ্যাপ্লিকেশনের কোডের জন্য এমন দর্শন যোগ করা পছন্দ করে না।

এসকিউএল ডিজাইন

আপনি যদি আপনার কোনও জটিল জটিল ক্যোয়ারীটি দ্রবীভূত করেন তবে আপনি জানতে পারেন যে সাবকিউরিয়াসগুলিতে প্রায়শই একটি প্যারামিটারের প্রয়োজন হবে যা অন্য সাবকিউয়ের উপর নির্ভর করে।

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

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

মালিকানা বাড়ানো

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

তবে শেষ পর্যন্ত সমস্যা কী?

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

সুতরাং একটি সফল রিফ্যাক্টরিং অর্জন করতে:

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

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

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


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

1

পুনরায় পয়েন্ট 1 এবং 3: দর্শনগুলি একমাত্র উপায় নয়। এছাড়াও অস্থায়ী টেবিল, মার্টস, টেবিল ভেরিয়েবলস, একত্রিত কলাম, সিটিই, ফাংশন, সঞ্চিত প্রক্রিয়া এবং আরডিবিএমএসের উপর নির্ভর করে সম্ভবত অন্যান্য নির্মাণ রয়েছে।

ডিবিএ (এবং আমি এমন কেউ হিসাবে কথা বলছি যারা ডিবিএ এবং বিকাশকারী উভয়ই হয়ে আছেন) বিশ্বকে বেশ বাইনারি উপায়ে দেখেন তাই প্রায়শই উপলব্ধিযোগ্য পারফরম্যান্সের শাস্তির কারণে দর্শন এবং ফাংশনগুলির মতো জিনিসগুলির বিরুদ্ধে থাকে are

পরবর্তীকালে, এনএফ থেকে সাব-অনুকূল হয়েও ডেনোরমাইজড টেবিলগুলি এই স্বীকৃতির সাথে জটিল যোগদানের প্রয়োজনীয়তা হ্রাস পেয়েছে দৃষ্টিকোণ, অত্যন্ত performant হয়।

লিনকিউ এর মতো প্রযুক্তির সাথে ক্লায়েন্ট ক্লায়েন্ট সাইড করার প্রবণতাও রয়েছেআপনি লাইন ২-তে উত্থাপিত ।

যদিও আমি সম্মত হই যে এসকিউএল মডুলারাইজ করার পক্ষে চ্যালেঞ্জ হতে পারে, দুর্দান্ত পদক্ষেপ নেওয়া হয়েছে যদিও ক্লায়েন্ট সাইড কোড এবং এসকিউএল এর মধ্যে সর্বদা দ্বিধাত্বিকতা থাকবে - যদিও 4 জিএল কিছুটা লাইনগুলিকে ঝাপসা করে দিয়েছে।

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


1
আমি কখনও "মার্ট" নির্মাণের কথা শুনিনি। এটা কি?
বিশপ

1
মার্টসগুলি সংগ্রহস্থলের (মাস্টার ডাটাবেস) কেবলমাত্র একটি উপসেট। যদি কোনও নির্দিষ্ট জটিল ক্যোয়ারীগুলি চালনার দরকার হয় তবে requests অনুরোধগুলির জন্য বিশেষভাবে একটি বিশেষ ডাটাবেস তৈরি করা যেতে পারে। খুব সাধারণ উদাহরণ হ'ল রিপোর্টিং মার্ট।
রবি ডি

1
কেন এটিকে নিম্নমান দেওয়া হয়েছিল তা নিয়ে বিভ্রান্ত। প্রশ্নের সরাসরি উত্তর দেয় না, তবে "বিকল্প 3: এর একটি সুস্পষ্ট সুস্পষ্ট উত্তর দেয়: এটি পরিচালনা করার অনেক উপায় রয়েছে, যা ব্যাপকভাবে ব্যবহৃত হয়"।
দেবী মরগান

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