অ্যাপ্লিকেশন বিকাশকারীদের দ্বারা করা ডেটাবেস বিকাশের ভুলগুলি [বন্ধ]


566

অ্যাপ্লিকেশন বিকাশকারীদের দ্বারা সাধারণ ডাটাবেস বিকাশের ভুলগুলি কী কী?


প্রায় সদৃশ stackoverflow.com/questions/346659/...
dkretz

উত্তর:


1002

1. যথাযথ সূচক ব্যবহার না করা

এটি তুলনামূলকভাবে সহজ তবে এখনও এটি সর্বদা ঘটে। বিদেশী কীগুলির উপর তাদের সূচি থাকতে হবে। আপনি যদি কোনও ক্ষেত্রে কোনও ক্ষেত্র ব্যবহার করছেন তবে আপনার WHEREসম্ভবত এটির একটি সূচক থাকা উচিত। এই জাতীয় সূচকগুলি প্রায়শই আপনাকে সম্পাদন করতে হবে এমন প্রশ্নের উপর ভিত্তি করে একাধিক কলাম কভার করা উচিত।

2. রেফারেন্সিয়াল অখণ্ডতা প্রয়োগ না

আপনার ডাটাবেসটি এখানে পরিবর্তিত হতে পারে তবে যদি আপনার ডাটাবেসগুলি রেফারেনশিয়াল অখণ্ডতা সমর্থন করে - যার অর্থ সমস্ত বিদেশী কীগুলি বিদ্যমান যে সত্তার দিকে নির্দেশ করার গ্যারান্টিযুক্ত - আপনি এটি ব্যবহার করা উচিত।

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

আরও এখানে:

৩. সারোগেট (প্রযুক্তিগত) প্রাথমিক কীগুলির চেয়ে প্রাকৃতিক ব্যবহার

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

আমার মতে আপনার সর্বদা সারোগেট কীগুলি ব্যবহার করা উচিত । এই প্রশ্নগুলিতে এই প্রশ্নগুলি উঠে এসেছে:

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

মনে রাখবেন, এমনকি দেশগুলিও অস্তিত্ব বন্ধ করতে পারে (উদাহরণস্বরূপ, যুগোস্লাভিয়া)।

4. DISTINCTকাজ করা প্রয়োজন যে কোয়েরি লিখছেন

আপনি প্রায়শই এটি ওআরএম-উত্পন্ন উত্সগুলি দেখুন see হাইবারনেট থেকে লগ আউটপুটটি দেখুন এবং আপনি সমস্ত ক্যোয়ারী দিয়ে শুরু দেখতে পাবেন:

SELECT DISTINCT ...

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

থেকে কেন আমি স্বতন্ত্র ঘৃণা :

আমার মতামত অনুসারে জিনিসগুলি সর্বাগ্রে পরিণত হয় যখন কোনও বিকাশকারী যখন যথেষ্ট তদন্ত করে, একসাথে সারণীগুলিতে যোগ দেয় এবং হঠাৎ করেই বুঝতে পারে যে দেখে মনে হয় যে সে নকল (বা আরও বেশি) সারি এবং তার তাত্ক্ষণিক প্রতিক্রিয়া পাচ্ছে ... এই "সমস্যার" তার "সমাধান" হ'ল DISTINCT কীওয়ার্ডটি ছুঁড়ে ফেলা এবং তার সমস্ত ঝামেলা দূরে যায় P

5. যোগদানের উপর একীকরণ পছন্দসই

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

এটি কতটা বিস্তৃত তা সম্পর্কে আপনাকে ধারণা দেওয়ার জন্য, আমি এই বিষয়টিতে এখানে বেশ কয়েকবার লিখেছি এবং এর জন্য অনেকটা নিম্নচালিত হয়েছি। উদাহরণ স্বরূপ:

এসকিউএল বিবৃতি থেকে - "যোগদান" বনাম "গ্রুপ দ্বারা এবং থাকা" :

প্রথম জিজ্ঞাসা:

SELECT userid
FROM userrole
WHERE roleid IN (1, 2, 3)
GROUP by userid
HAVING COUNT(1) = 3

প্রশ্নের সময়: 0.312 এস

দ্বিতীয় প্রশ্ন:

SELECT t1.userid
FROM userrole t1
JOIN userrole t2 ON t1.userid = t2.userid AND t2.roleid = 2
JOIN userrole t3 ON t2.userid = t3.userid AND t3.roleid = 3
AND t1.roleid = 1

প্রশ্নের সময়: 0.016 এস

সেটা ঠিক. আমি প্রস্তাবিত যোগদানের সংস্করণটি সামগ্রিক সংস্করণের চেয়ে বিশ গুণ দ্রুত।

Complex. ভিউগুলির মাধ্যমে জটিল প্রশ্নগুলি সরলকরণ নয়

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

  • পার্টি : জনগণ ও সংস্থা;
  • পার্টির ভূমিকা : এই দলগুলি যেমন কাজ করেছিল, উদাহরণস্বরূপ কর্মী এবং নিয়োগকারী;
  • পার্টির ভূমিকা সম্পর্কিত সম্পর্ক : সেই ভূমিকাগুলি একে অপরের সাথে সম্পর্কিত কীভাবে।

উদাহরণ:

  • টেড হ'ল ব্যক্তি, পার্টির একটি উপ-প্রকার;
  • টেডের অনেকগুলি ভূমিকা রয়েছে যার মধ্যে একটি হ'ল কর্মচারী;
  • ইন্টেল একটি সংগঠন, একটি পার্টির উপপ্রকার;
  • ইন্টেলের অনেক ভূমিকা রয়েছে যার মধ্যে একটি নিয়োগকর্তা;
  • ইন্টেল টেড নিয়োগ করে, যার অর্থ তাদের নিজ নিজ ভূমিকার মধ্যে একটি সম্পর্ক রয়েছে।

সুতরাং টেডকে তার নিয়োগকর্তার সাথে সংযুক্ত করতে পাঁচটি টেবিল যুক্ত হয়েছে। আপনি ধরে নিলেন সমস্ত কর্মচারী ব্যক্তি (সংস্থা নয়) এবং এই সহায়তা দর্শন সরবরাহ করুন:

CREATE VIEW vw_employee AS
SELECT p.title, p.given_names, p.surname, p.date_of_birth, p2.party_name employer_name
FROM person p
JOIN party py ON py.id = p.id
JOIN party_role child ON p.id = child.party_id
JOIN party_role_relationship prr ON child.id = prr.child_id AND prr.type = 'EMPLOYMENT'
JOIN party_role parent ON parent.id = prr.parent_id = parent.id
JOIN party p2 ON parent.party_id = p2.id

এবং হঠাৎ আপনার কাছে থাকা ডেটাগুলির একটি খুব সাধারণ দৃশ্য রয়েছে তবে একটি অত্যন্ত নমনীয় ডেটা মডেল।

San. স্যানিটাইজিং ইনপুট নয়

এটি একটি বিশাল এক। এখন আমি পিএইচপি পছন্দ করি তবে আপনি কী করছেন তা যদি আপনি না জানেন তবে আক্রমণ করার ঝুঁকিপূর্ণ সাইটগুলি তৈরি করা সত্যিই সহজ। ছোট্ট ববি টেবিলগুলির গল্পের চেয়ে ভাল আর কোনও কিছুই এটির পক্ষে যোগ করে না ।

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

8. প্রস্তুত বিবৃতি ব্যবহার না

প্রস্তুত বিবৃতিগুলি হ'ল আপনি যখন সন্নিবেশ, আপডেট এবং WHEREধারাগুলিতে ব্যবহৃত কোনও ডেটা সংকলন করেন এবং পরে সরবরাহ করেন। উদাহরণ স্বরূপ:

SELECT * FROM users WHERE username = 'bob'

বনাম

SELECT * FROM users WHERE username = ?

অথবা

SELECT * FROM users WHERE username = :username

আপনার প্ল্যাটফর্মের উপর নির্ভর করে

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

প্রস্তুত বিবৃতি ব্যবহার করে আপনাকে কতগুলি নির্দিষ্ট প্রশ্ন ব্যবহৃত হয় সে সম্পর্কে অর্থবহ পরিসংখ্যানও দেবে।

প্রস্তুত বিবৃতিগুলি এসকিউএল ইঞ্জেকশন আক্রমণগুলির থেকে আপনাকে আরও রক্ষা করবে।

9. যথেষ্ট স্বাভাবিক না

ডাটাবেস নরমালাইজেশন মূলত ডাটাবেস ডিজাইনের অনুকূলকরণের প্রক্রিয়া বা কীভাবে আপনি আপনার ডেটা টেবিলগুলিতে সংগঠিত করেন।

এই সপ্তাহে আমি এমন কিছু কোড জুড়ে দৌড়েছি যেখানে কেউ একটি অ্যারে চাপিয়ে দিয়েছিল এবং এটি একটি ডাটাবেসে একটি একক ক্ষেত্রে intoুকিয়েছে। এটি স্বাভাবিক করা হ'ল এই অ্যারের উপাদানটিকে শিশু টেবিলে একটি পৃথক সারি হিসাবে বিবেচনা করা হবে (অর্থাত্ একটি একাধিক সম্পর্ক)।

এটি ব্যবহারকারী আইডির একটি তালিকা সংরক্ষণের জন্য সেরা পদ্ধতিতেও এসেছে :

আমি অন্যান্য সিস্টেমে দেখেছি যে তালিকাটি সিরিয়ালযুক্ত পিএইচপি অ্যারেতে সংরক্ষিত আছে।

তবে স্বাভাবিককরণের অভাব বিভিন্ন রূপে আসে।

আরও:

১০. খুব বেশি সাধারণকরণ

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

আমি একবার এমন সিস্টেমে কাজ করেছি যার ক্লায়েন্টদের জন্য এমন একটি বিশাল স্তরক্রম ছিল যা এরকম কিছু হয়েছিল:

Licensee ->  Dealer Group -> Company -> Practice -> ...

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

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

আরও:

১১. একচেটিয়া আরাকস ব্যবহার করা

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

থেকে রিলেশনাল ডাটাবেস ডিজাইন করতে প্র্যাকটিকাল গাইড :

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

12. মোটেই প্রশ্নের উপর পারফরম্যান্স বিশ্লেষণ না করা

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

১৩. ইউনিয়ন সমস্ত এবং বিশেষত ইউনিয়ন গঠনের উপর অতিরিক্ত নির্ভরতা

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

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

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

14. প্রশ্নগুলিতে ওআর শর্তাদি ব্যবহার করে

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

খারাপ:

... WHERE a = 2 OR a = 5 OR a = 11

উত্তম:

... WHERE a IN (2, 5, 11)

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

15. উচ্চ-সম্পাদনযোগ্য সমাধানগুলিতে নিজেকে ndণ দেওয়ার জন্য তাদের ডেটা মডেলটি ডিজাইন করা নয়

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

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

অকালীন অপটিমাইজেশন হ'ল সমস্ত অশুভের মূল

16. ডাটাবেস লেনদেনের ভুল ব্যবহার

একটি নির্দিষ্ট প্রক্রিয়াটির জন্য সমস্ত ডেটা পরিবর্তনগুলি পারমাণবিক হওয়া উচিত। অর্থাৎ যদি অপারেশন সফল হয় তবে এটি পুরোপুরি করে। যদি এটি ব্যর্থ হয় তবে ডেটাটি অপরিবর্তিত রয়েছে। - 'আধাপূর্ণ' পরিবর্তনের কোনও সম্ভাবনা থাকা উচিত নয়।

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

যাইহোক, যদি কোনও প্রক্রিয়াটির প্রয়োজন হয় যাতে একচেটিয়া অবস্থায় তথ্য রাখতে একক হিসাবে একাধিক বিবৃতি দেওয়া হয়, তবে উপযুক্ত লেনদেন নিয়ন্ত্রণ প্রয়োজন।

  • প্রথম বিবৃতি দেওয়ার আগে একটি লেনদেন শুরু করুন।
  • শেষ বিবৃতি পরে লেনদেন প্রতিশ্রুতিবদ্ধ।
  • কোনও ত্রুটিতে, লেনদেনের রোলব্যাক করুন। এবং খুব এনবি! ত্রুটির পরে সমস্ত বিবৃতি এড়ানো / বাতিল করতে ভুলবেন না।

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

17. 'সেট-ভিত্তিক' দৃষ্টান্ত বোঝা হচ্ছে না

এসকিউএল ভাষা নির্দিষ্ট ধরণের সমস্যার জন্য উপযুক্ত একটি নির্দিষ্ট দৃষ্টান্ত অনুসরণ করে। জাভা, সি #, ডেলফি ইত্যাদির মতো ল্যাঙ্গুয়েজে ন্যূনতম সমস্যাগুলির সাথে মোকাবিলার জন্য ভাষা সংগ্রাম করে বিভিন্ন বিক্রেতার সাথে নির্দিষ্ট এক্সটেনশন ith

এই বোঝার অভাবটি নিজেকে কয়েকভাবে প্রকাশ করে।

  • ড্যাটাবেসে অনুপযুক্তভাবে অত্যধিক পদ্ধতিগত বা আবশ্যক যুক্তি চাপিয়ে দেওয়া।
  • কার্সারের অনুপযুক্ত বা অতিরিক্ত ব্যবহার। বিশেষত যখন একটি একক জিজ্ঞাসা যথেষ্ট হবে।
  • ভুলভাবে ধরে ধরে নেওয়া যে একাধিক সারি আপডেটগুলিতে প্রভাবিত সারিতে একবার আগুন লাগিয়ে দেয়।

দায়িত্বের স্পষ্ট বিভাজন নির্ধারণ করুন এবং প্রতিটি সমস্যা সমাধানের জন্য উপযুক্ত সরঞ্জামটি ব্যবহার করার চেষ্টা করুন।


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

1
আমাকে # 6 সম্পর্কে জিজ্ঞাসা করতে হবে। এর মতো মতামত ব্যবহার করা আমার পছন্দের জিনিসগুলির মধ্যে একটি, তবে আমি সম্প্রতি আমার ভয়াবহতার কাছে জানতে পেরেছি যে অন্তর্নিহিত টেবিলগুলিতে মাইএসকিউএল সূচকগুলি কেবলমাত্র মান্য করা হয় যদি দর্শনটির কাঠামোটি মার্জ অ্যালগরিদম ব্যবহারের অনুমতি দেয়। অন্যথায়, একটি টেম্প টেবিল ব্যবহার করা হয় এবং আপনার সমস্ত সূচকগুলি অকেজো। এটি আরও বেশি উদ্বেগজনক যখন আপনি বুঝতে পারেন যে প্রচুর ক্রিয়াকলাপ এই আচরণের কারণ। .01 সেকেন্ডের ক্যোয়ারিকে 100 সেকেন্ডে রূপান্তরিত করার দুর্দান্ত উপায়। এখানকার অন্য কারও কি অভিজ্ঞতা আছে? আমার পরবর্তী মন্তব্যে লিঙ্কগুলি চেক করুন।
পিটার বেইলি

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

1
RE: # 11 ডেটা অখণ্ডতা প্রয়োগের জন্য প্রয়োজনীয় চেক সীমাবদ্ধতা তুচ্ছ। এই নকশাটি এড়ানোর অন্যান্য কারণ রয়েছে, তবে "জটিল" চেক সীমাবদ্ধতার প্রয়োজন তাদের মধ্যে একটি নয়।
থমাস

2
# 3 দিয়ে আপনি সৎ হচ্ছেন না। "আপনার এটির প্রয়োজন নাও হতে পারে" এর চেয়ে কৃত্রিম চাবিতে আরও ডাউনসাইড রয়েছে। বিশেষত, একটি প্রাকৃতিক কী ব্যবহার করা আপনাকে ডিস্কে আপনার টেবিলের ডেটা যাতে লেখা হয় সেটিকে নিয়ন্ত্রণ করার ক্ষমতা দেয় give আপনি কীভাবে আপনার টেবিলটি জিজ্ঞাসা করা হবে তা যদি আপনি জানেন তবে আপনি এটি সূচী করতে পারেন যাতে একই সাথে একযোগে অ্যাক্সেস করা সারিগুলি একই পৃষ্ঠায় শেষ হবে। তদতিরিক্ত, আপনি একটি অনন্য যৌগিক সূচক ব্যবহার করে ডেটা অখণ্ডতা প্রয়োগ করতে পারেন। আপনার যদি এটির প্রয়োজন হয় তবে আপনাকে এটি আপনার কৃত্রিম কী সূচক ছাড়াও যুক্ত করতে হবে। যদি বলা হয় যৌগিক সূচকটি আপনার পিকি এটি একটি পাথর দিয়ে 2 পাখি মারা গেছে।
শেন এইচ

110

বিকাশকারীদের দ্বারা তৈরি মূল ডেটাবেস ডিজাইন এবং প্রোগ্রামিং ভুল

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

  • অস্বীকৃতিযুক্ত ডেটা ব্যবহার করা হচ্ছে। অতিমাত্রায় অস্বীকৃত ডেটা এবং প্রয়োগের মধ্যে এটিকে বজায় রাখার চেষ্টা করা ডেটা অখণ্ডতার সমস্যাগুলির একটি রেসিপি। স্বল্প পরিমাণে অস্বীকৃতি ব্যবহার করুন। কোনও ক্যোয়ারিতে একটি যোগ যোগ করতে না চাওয়া হ'ল অস্বীকার করার অজুহাত নয়।

  • এসকিউএল লিখে ভয় পেয়েছি। এসকিউএল রকেট বিজ্ঞান নয় এবং এটি কার্য সম্পাদনে আসলে বেশ ভাল। ও / আর ম্যাপিং স্তরগুলি 95% ক্যোরিয়াস করা বেশ ভাল যা সাধারণ এবং সেই মডেলটিতে ভাল ফিট। কখনও কখনও এসকিউএল হয় কাজ করার সেরা উপায়।

  • কৌতুকপূর্ণ 'কোনও সঞ্চিত পদ্ধতি নয়' নীতি। আপনি বিশ্বাস করেন যে সঞ্চিত পদ্ধতিগুলি খারাপ কিনা, এই সফ্টওয়্যার প্রকল্পে এই ধরণের মতবাদী মনোভাবের কোনও স্থান নেই।

  • ডাটাবেস ডিজাইন বুঝতে পারছি না। সাধারণীকরণটি আপনার বন্ধু এবং এটি রকেট বিজ্ঞান নয়। যোগদান এবং কার্ডিনালিটি মোটামুটি সহজ ধারণা - আপনি যদি ডেটাবেস অ্যাপ্লিকেশন বিকাশের সাথে জড়িত থাকেন তবে সেগুলি না বোঝার জন্য আসলেই কোনও অজুহাত নেই।


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

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

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

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

2
তাহলে আপনার ডিবিএ হয় অলস বা অযোগ্য pe
কনসার্নড

80
  1. ডাটাবেস স্কিমাতে সংস্করণ নিয়ন্ত্রণ ব্যবহার করা হচ্ছে না
  2. সরাসরি লাইভ ডাটাবেসের বিরুদ্ধে কাজ করা
  3. আরও উন্নত ডাটাবেস ধারণাগুলি পড়া এবং বুঝতে না পারা (সূচিপত্র, ক্লাস্টারড ইনডেক্স, সীমাবদ্ধতা, বস্তুগত দৃষ্টিভঙ্গি ইত্যাদি)
  4. স্কেলাবিলিটির জন্য পরীক্ষায় ব্যর্থ হচ্ছে ... কেবলমাত্র 3 বা 4 টি সারির পরীক্ষার ডেটা কখনই আপনাকে আসল লাইভ পারফরম্যান্সের আসল চিত্র দেয় না

1
আমি দ্বিতীয়, ভারী, # 1 এবং # 2। যে কোনও সময় আমি ডিবিতে পরিবর্তন করি আমি এর স্কিমা এবং সংস্করণটি ডাম্প করি; আমার কাছে তিনটি ডাটাবেস সেটআপ রয়েছে, একটি ডেভ, একটি স্টেজিং এবং একটি লাইভ - কিছুই কখনও লাইভ ডিবিতে "পরীক্ষিত" হয় না!
Ixmatus

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

46

অতিরিক্ত ব্যবহার এবং / অথবা সঞ্চিত পদ্ধতিতে নির্ভরতা।

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

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

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

অতীতে জাভা দলের সাথে কাজ করা আমি দ্রুত জানতে পারি যে প্রায়শই সম্পূর্ণ বিপরীত পরিবেশটি সেই পরিবেশে ধারণ করে। একটি জাভা আর্কিটেক্ট একবার আমাকে বলেছিল: "ডাটাবেস কোডের জন্য নয়, ডেটার জন্য" "

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


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

উপকারিতা: সুরক্ষা - আপনার অ্যাপ্লিকেশনগুলিকে "" থেকে মুছে ফেলুন ... "ক্ষমতা দেওয়ার দরকার নেই; টুইটগুলি - ডিবিএ'র পুরো অ্যাপ্লিকেশনটি পুনরায় সংকলন / স্থাপন করা ছাড়াই প্রশ্নগুলি ঝাঁকুনি করতে পারে; বিশ্লেষণ - এটি এখনও বৈধ কিনা তা নিশ্চিত করার জন্য একটি ডেটা মডেল পরিবর্তনের পরে প্রচুর পরিমাণ প্রক্সকে পুনরায় কম্পাইল করা সহজ; এবং, পরিশেষে, এসকিউএল বিবেচনা করা ডাটাবেস ইঞ্জিন দ্বারা চালিত করা হয় (আপনার অ্যাপ্লিকেশন নয়) তারপরে "ডাটাবেস ডেটা জন্য, কোড নয়" এর ধারণাটি কেবল পিছিয়ে দেওয়া হয়।
নোটমি

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

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

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

41

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


2
ডাটাবেসটির আকার প্রাসঙ্গিক, তবে একটি বড় সমস্যা লোড - এমনকি যদি আপনি একটি বাস্তব ডেটাसेटে পরীক্ষা করেন তবে ডেটাবেস যখন কোনও প্রোডাকশন লোডের অধীনে থাকে তখন আপনি আপনার অনুসন্ধানগুলির পারফরম্যান্স পরীক্ষা করে নিচ্ছেন না, যা সত্যিকারের চোখ-ওপেনার হতে পারে।
ডেভিডক্লি

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


28

দুর্বল পারফরম্যান্স সহ সম্পর্কযুক্ত সাবকোয়ারিগুলির কারণে

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

সংক্ষিপ্ত উদাহরণ এবং ওরাকল সিনট্যাক্সটি ক্ষমা করুন, তবে ধরা যাক যে আপনি আপনার কোনও দোকানে ভাড়া নেওয়া সমস্ত কর্মচারী সন্ধান করতে চেয়েছিলেন গতবারের পর থেকে দোকানে একদিনে 10,000 ডলারেরও কম বিক্রয় হয়েছিল।

select e.first_name, e.last_name
from employee e
where e.start_date > 
        (select max(ds.transaction_date)
         from daily_sales ds
         where ds.store_id = e.store_id and
               ds.total < 10000)

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

select e.first_name, e.last_name
from employee e,
     (select ds.store_id,
             max(s.transaction_date) transaction_date
      from daily_sales ds
      where ds.total < 10000
      group by s.store_id) dsx
where e.store_id = dsx.store_id and
      e.start_date > dsx.transaction_date

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

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


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

21

আমার অভিজ্ঞতায়:
অভিজ্ঞ ডিবিএর সাথে যোগাযোগ করছেন না।


17

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


16

টেবিলগুলির মধ্যে সম্পর্ক স্থাপন করতে ভুলে যাচ্ছেন। আমার মনে আছে যখন আমি আমার বর্তমান নিয়োগকর্তার সাথে প্রথম কাজ করা শুরু করেছি তখন এটি পরিষ্কার করতে হয়েছিল।


14

(বিপুল পরিমাণে) ডেটা সংরক্ষণের জন্য এক্সেল ব্যবহার করা।

আমি সংস্থাগুলি হাজার হাজার সারি ধারণ করে এবং একাধিক ওয়ার্কশিট ব্যবহার করতে দেখেছি (এক্সেলের পূর্ববর্তী সংস্করণে সারি সীমা 65535 এর কারণে)।


এক্সেল রিপোর্ট, ডেটা উপস্থাপনা এবং অন্যান্য কাজের জন্য উপযুক্ত, তবে এটি একটি ডাটাবেস হিসাবে বিবেচনা করা উচিত নয়।


14

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

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


2
+1 - ডেটাবেস প্রোগ্রামিংয়ে যান্ত্রিক উপাদানগুলির আচরণের অনুকূলকরণ জড়িত। নোট, তবে, নুথ বলেছেন যে অকালীন অপ্টিমাইজেশন হ'ল প্রায় 97% সময়ের (বা সেই প্রভাবের শব্দ) সমস্ত মন্দের মূল the ডাটাবেস ডিজাইন এমন একটি ক্ষেত্র যেখানে আপনাকে সত্যিই এই সামনের অংশটি সম্পর্কে ভাবতে হবে।
কনসার্নড

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

13

প্যারামিটারাইজড কোয়েরি ব্যবহার করছেন না। তারা বাঁধন সুন্দর কুশলী করছি এসকিউএল ইনজেকশন

এটি অন্য উত্তরে উল্লিখিত ইনপুট ডেটা স্যানিটাইজ না করার একটি নির্দিষ্ট উদাহরণ।


3
স্যানিটাইজিং ইনপুট ব্যতীত ভুল। স্যানিটাইজিং বলতে বোঝায় যে এটি এমন কোনও জায়গায় রাখা যেখানে এটি বিপজ্জনক হতে পারে। প্যারামিটারাইজেশন মানে একে একে ক্ষতির পথ থেকে দূরে রাখা।
ডাস্টিন

12

আমি এটি ঘৃণা করি যখন বিকাশকারীরা নেস্টেড নির্বাচিত বিবৃতিগুলি ব্যবহার করে বা এমনকি কোনও প্রশ্নের "নির্বাচন" অংশের মধ্যে একটি নির্বাচিত বিবৃতিটির ফলাফলের কার্য সম্পাদন করে functions

আমি সত্যিই অবাক হয়েছি আমি এখানে অন্য কোথাও দেখতে পাচ্ছি না, সম্ভবত আমি এটিকে উপেক্ষা করেছি, যদিও @ অ্যাডামের সাথে একই রকম ইঙ্গিত পাওয়া গেছে।

উদাহরণ:

SELECT
    (SELECT TOP 1 SomeValue FROM SomeTable WHERE SomeDate = c.Date ORDER BY SomeValue desc) As FirstVal
    ,(SELECT OtherValue FROM SomeOtherTable WHERE SomeOtherCriteria = c.Criteria) As SecondVal
FROM
    MyTable c

এই দৃশ্যে, যদি MyTable 10000 সারি প্রদান করে তবে ফলাফলটি এমনভাবে দেখাবে যে কোয়েরিটি সবেমাত্র 20001 কোয়েরিতে চলেছে, কারণ ফলাফলের প্রতিটি লাইনের জন্য একবারে প্রাথমিক কোয়েরি প্লাস করে অন্য টেবিলগুলির জন্য একবার কোয়েরি চালাতে হয়েছিল।

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

এর চেয়ে ভাল (প্রয়োজনীয় নিখুঁত নয়) উদাহরণটি হ'ল:

SELECT
     s.SomeValue As FirstVal
    ,o.OtherValue As SecondVal
FROM
    MyTable c
    LEFT JOIN (
        SELECT SomeDate, MAX(SomeValue) as SomeValue
        FROM SomeTable 
        GROUP BY SomeDate
     ) s ON c.Date = s.SomeDate
    LEFT JOIN SomeOtherTable o ON c.Criteria = o.SomeOtherCriteria

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


12

এসকিউএল-ভিত্তিক ডাটাবেসের জন্য:

  1. ক্লাস্টার্ড সূচকগুলির সুবিধা গ্রহণ না করা বা ক্লাস্টার থেকে ভুল কলাম (গুলি) বেছে না নেওয়া।
  2. পিতা-মাতার / সন্তানের টেবিল সম্পর্কের ক্ষেত্রে একটি বিদেশী কী (INT) এ যোগদানের জন্য প্রাথমিক কী হিসাবে সেরিয়াল (স্বায়ত্তশাসন) ডেটাটাইপ ব্যবহার না করা।
  3. অনেকগুলি রেকর্ড সন্নিবেশিত বা মোছা হয়ে যাওয়ার পরে কোনও টেবিলে পরিসংখ্যান আপডেট করা হয় না।
  4. অনেকগুলি সারি সন্নিবেশ করা বা মুছে ফেলা হলে টেবিলগুলি পুনরায় সাজানো (যেমন আনলোডিং, ড্রপিং, পুনরায় তৈরি, লোডিং এবং পুনরায় সূচীকরণ) টেবিলগুলি পুনরায় সংগঠিত করা হয় না (কিছু ইঞ্জিন মুছে ফেলা সরিয়ে একটি সারণীতে ফিজিক্যালি মুছে ফেলা সারিগুলি রাখে))
  5. উচ্চ লেনদেনের হার রয়েছে এমন বড় টেবিলগুলিতে এক্সপ্রেশন অন এক্সপ্রেশন (যদি সমর্থন করা হয়) এর সুবিধা নিচ্ছেন না।
  6. একটি কলামের জন্য ভুল ডেটাটাইপ চয়ন করা!
  7. একটি যথাযথ কলামের নাম বেছে নেই।
  8. টেবিলের শেষে নতুন কলাম যুক্ত করা হচ্ছে না।
  9. প্রায়শই ব্যবহৃত প্রশ্নগুলিকে সমর্থন করার জন্য যথাযথ সূচী তৈরি করা হয় না।
  10. কয়েকটি সম্ভাব্য মান সহ কলামগুলিতে সূচী তৈরি করা এবং অপ্রয়োজনীয় সূচী তৈরি করা।
    ... আরও যোগ করা হবে।

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

প্রাথমিক এবং বিদেশী কীটির জন্য স্বতঃসংখ্যা ব্যবহারের মূল কারণটি হ'ল গ্যারান্টি দেওয়া যে কোনও পিতামাতা-সন্তানের যোগদান অন্য যে কোনও কলামে পরিবর্তনকে অনিয়ত রাখতেই পারে। গ্রাহকের নাম বা অন্যান্য ডেটার মতো আলাদা প্রাথমিক কী ব্যবহার করা ঝুঁকিপূর্ণ হতে পারে!
ফ্র্যাঙ্ক আর

@ ডেভিড: আমি সংশোধন করে দাঁড়িয়েছি! .. প্রাথমিক কী হিসাবে স্বায়ত্তশাসনটি ব্যবহার করা প্রয়োজন নয়, পিতা-মাতার মধ্যে এখনও একটি সূচী সিরিয়াল কলাম থাকতে পারে, গ্যারান্টি দেওয়ার জন্য সন্তানের সারোগেটে যোগ দেওয়ার সাথে সম্পর্ক ছিন্ন করা হবে না, অন্যটি থাকার পরে সারিটি সনাক্ত করতে একটি অর্থবহ প্রাথমিক হিসাবে কলাম!
ফ্র্যাঙ্ক আর।

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

9
  • প্রোডাকশন ডাটাবেসের অভ্যন্তরে কিছু সমস্যা ঠিক করার আগে ব্যাকআপ নেওয়া হচ্ছে না।

  • সঞ্চিত পদ্ধতিতে সঞ্চিত অবজেক্টগুলিতে (টেবিল, মতামত) ডিডিএল কমান্ড ব্যবহার করা।

  • সঞ্চিত প্রকট ব্যবহারের ভয় বা ওআরএম কোয়েরিগুলি ব্যবহার করার ভয় যেখানেই কোনও ব্যবহারের পক্ষে দক্ষ / উপযুক্ত।

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


8

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


কত দূরে? যদি কোনও ডেটা সদৃশ না হয় আপনি কীভাবে এটি আরও এগিয়ে নিতে পারেন?
ফাইনাল ফিনিউ করুন

সাধারণকরণ হ'ল অপ্রয়োজনীয় ডেটা অপসারণ এবং ক্রমহ্রাসমান কার্য সম্পাদন এবং জটিলতা বাড়ানো নমনীয়তা বৃদ্ধি করার একটি ভারসাম্য। সঠিক ব্যালেন্স সন্ধান করতে অভিজ্ঞতা লাগে এবং সময়ের সাথে এটি পরিবর্তন হয়। দেখুন en.wikipedia.org/wiki/Database_normalization তথ্যের জন্য যখন denormalize উপর
নাথন Voxland

8

ডাটাবেসটিকে কেবল স্টোরেজ মেকানিজম হিসাবে চিকিত্সা করা (যেমন মহিমান্বিত সংগ্রহ গ্রন্থাগার) এবং সুতরাং তাদের প্রয়োগের অধীনস্থ (অন্যান্য অ্যাপ্লিকেশনগুলি যা ডেটা ভাগ করে নেবে)


এটির একটি ছদ্মবেশটি ডিবিতে যেখানে এটি রয়েছে তার পরিবর্তে অ্যাপ্লিকেশনটিতে খুব বেশি কোয়েরি কাজটি অফলোড করছে। লিনকিউ এ সম্পর্কে বিশেষত খারাপ।
ডিভে

8
  • "এটি অত্যধিক যাদু" বা " আমার ডাটাবেসে নয়" এর মতো কারণে হাইবারনেটের মতো একটি ওআরএম খারিজ করা ।
  • হাইবারনেটের মতো কোনও ওআরএমের উপর খুব বেশি ভরসা করা এবং এটি উপযুক্ত নয় যেখানে এটি জুতা দেওয়ার চেষ্টা করা।

8

1 - অযৌক্তিকভাবে এমন কোনও মানতে কোনও ফাংশন ব্যবহার করা হচ্ছে যেখানে সেই সূচকের ফলাফল সহ ধারাটি ব্যবহার করা হচ্ছে না।

উদাহরণ:

where to_char(someDate,'YYYYMMDD') between :fromDate and :toDate

পরিবর্তে

where someDate >= to_date(:fromDate,'YYYYMMDD') and someDate < to_date(:toDate,'YYYYMMDD')+1

এবং কিছুটা হলেও: যে মানগুলির প্রয়োজন তাদের ফাংশনাল ইনডেক্স যুক্ত করা হচ্ছে না ...

2 - তথ্যের বৈধতা নিশ্চিত করতে চেক সীমাবদ্ধতাগুলি যুক্ত করা হচ্ছে না। সীমাবদ্ধতাগুলি ক্যোয়ারী অপ্টিমাইজার দ্বারা ব্যবহার করা যেতে পারে এবং আপনি আপনার আক্রমণকারীদের বিশ্বাস করতে পারেন তা নিশ্চিত করতে তারা অবশ্যই সহায়তা করে। এগুলি ব্যবহার না করার ঠিক কোনও কারণ নেই।

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

এটি ভাবুন, ডেটাবিহীন একটি টেবিলটি নতুন ডিজাইনের জন্য খুব সস্তা। কয়েক মিলিয়ন রেকর্ডের সাথে একটি সারণী যার অখণ্ডতা নেই ... পুনরায় ডিজাইনের জন্য এত সস্তা নয়। সুতরাং, কলাম বা টেবিল তৈরি করার সময় সঠিক নকশাটি করা কোদালগুলিতে এমরোটাইজড।

4 - প্রতি সে ডাটাবেস সম্পর্কে এত বেশি নয় তবে সত্যই বিরক্তিকর। এসকিউএল এর কোড মানের সম্পর্কে যত্নশীল নয়। আপনার এসকিউএল পাঠ্যে প্রকাশ করা হয়েছে তা স্ট্রিং ম্যানিপুলেশন অ্যালগরিদমগুলির স্তূপগুলিতে যুক্তিটি আড়াল করা ঠিক করে না। আপনার সহকর্মী প্রোগ্রামার দ্বারা পাঠযোগ্য এমন উপায়ে পাঠ্যতে এসকিউএল লেখা পুরোপুরি সম্ভব।


7

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

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

এবং সবশেষে: একটি স্পষ্ট, ধারাবাহিক, স্বজ্ঞাত নামকরণ কনভেনশন ব্যবহার করুন। কোডের একটি ভাল লিখিত টুকরোটি একইভাবে পাঠযোগ্য, একটি ভাল এসকিউএল স্কিমা বা ক্যোয়ারী পড়তে হবে এবং ব্যবহারিকভাবে আপনাকে মন্তব্য করেও কী করছে তা বলা উচিত । ছয় মাসের মধ্যে নিজেকে ধন্যবাদ জানাতে হবে, যখন আপনাকে টেবিলে রক্ষণাবেক্ষণ করতে হবে। "SELECT account_number, billing_date FROM national_accounts""নির্বাচন করুন এসিসিটিএনটিএনবিআর, এনটিএনএল্যাক্টস থেকে বিল্ড্যাট" এর সাথে কাজ করা অসীম সহজ।


আপনি যদি এগুলি সঠিকভাবে সেট আপ করেন তবে তারা তা করবে না তবে এটিতে ট্রিগারগুলির ব্যবহার জড়িত যা অনেক লোকের মধ্যে অ্যালার্জি রয়েছে।
এইচএলজিইএম

6

মোছা ক্যুরি (বিশেষত উত্পাদন ডেটাবেজে) চালানোর আগে কোনও সম্পর্কিত নির্বাচন বাছাই করে না!


5

বিশ বছরে আমি সবচেয়ে সাধারণ ভুলটি দেখেছি: পরিকল্পনা করার আগে নয়। অনেক বিকাশকারী একটি ডেটাবেস এবং টেবিল তৈরি করে এবং তারপরে অ্যাপ্লিকেশনগুলি তৈরি করার সাথে সাথে টেবিলগুলি ক্রমাগত পরিবর্তন এবং প্রসারিত করে। শেষ ফলাফলটি প্রায়শই একটি জগাখিচুড়ি এবং অকার্যকর এবং পরে পরিষ্কার করা বা সরলকরণ করা কঠিন।


1
আমি এই পরিস্থিতিতে যে ভয়াবহতা সৃষ্টি করতে পারি তা কল্পনা করতে পারি ... স্কিমহীন ডেটাবেসগুলি দ্রুত প্রোটোটাইপিং এবং পুনরাবৃত্তির বিকাশের জন্য আরও ভাল ফিট তবে অন্য সব কিছুর মতো এই জাতীয় নমনীয়তা বিভিন্ন বাণিজ্য-অফের সাথে আসে।
Zsolt Török

4

ক) হার্ডকডিং ক্যোয়ারী মানগুলিকে স্ট্রিংয়ে
খ) উইন্ডোজ ফর্ম অ্যাপ্লিকেশনটিতে "অনবটটন প্রেস" ক্রিয়ায় ডাটাবেস ক্যোয়ারী কোড স্থাপন করা

আমি দুজনেই দেখেছি।


4
"উইন্ডোজ ফর্ম অ্যাপ্লিকেশনে" অনবটটন প্রেস "ক্রিয়ায় ডিবি কোয়েরি কোডটি রেখেছেন" এখানে ডাটাবেসটি কী ভুল?
পুনরাবৃত্তি

@ রিসার্সিভ: এটি একটি বিশাল এসকিউএল ইঞ্জেকশন দুর্বলতা। যে কেউ আপনার সার্ভারে নির্বিচারে এসকিউএল প্রেরণ করতে পারে এবং এটি ভারব্যাটিম চালানো হবে।
বিল কারভিন

@ রিসার্সিভের সাথে একমত এগুলির সত্যিই ডিবি সম্পর্কিত কোনও সম্পর্ক নেই do
পি.কম্পবেল

খ) একটি আর্কিটেকচার ভুল। অবশ্যই, আপনার অ্যাপে সরাসরি কোডিং কোয়েরি করা যাইহোক, একটি খারাপ ধারণা।
ডিভে

4

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


4
  1. এই ভেবে যে তারা যখন ডিবিএ এবং ডেটা মডেলার / ডিজাইনার তখন those অঞ্চলগুলিতে কোনও ধরণের কোনও আনুষ্ঠানিক অনুপ্রবেশ নেই।

  2. এই ভেবে যে তাদের প্রকল্পের জন্য কোনও ডিবিএর দরকার নেই কারণ সেই জিনিসগুলি সবই সহজ / তুচ্ছ।

  3. ডাটাবেসে যে কাজ করা উচিত এবং অ্যাপে করা উচিত সেই কাজগুলির মধ্যে সঠিকভাবে চিহ্নিত করতে ব্যর্থ।

  4. ব্যাকআপগুলি বৈধতা দিচ্ছে না, বা ব্যাক আপ নেওয়া হচ্ছে না।

  5. তাদের কোডে কাঁচা এসকিউএল এম্বেড করা।



3

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


3

কোনও ডিবিএমএস হুডের নীচে কীভাবে কাজ করে তা বোঝা যাচ্ছে না।

ক্লাচ কীভাবে কাজ করে তা না বুঝে আপনি সঠিকভাবে লাঠি চালনা করতে পারবেন না। এবং আপনি কীভাবে আপনার হার্ডডিস্কের কোনও ফাইলকে সত্যই লিখছেন তা বুঝতে না পেরে আপনি কীভাবে একটি ডাটাবেস ব্যবহার করবেন তা বুঝতে পারবেন না।

বিশেষ করে:

  1. আপনি কি জানেন যে একটি ক্লাস্টার্ড সূচক কী? আপনি যখন আপনার স্কিমা ডিজাইন করেছেন তখন আপনি কি এটি সম্পর্কে চিন্তাভাবনা করেছেন?

  2. আপনি কীভাবে সূচকগুলি সঠিকভাবে ব্যবহার করতে জানেন? কিভাবে একটি সূচক পুনরায় ব্যবহার করবেন? আপনি কি জানেন যে একটি প্রচ্ছদ সূচক কী?

  3. এত দুর্দান্ত, আপনার সূচক আছে। আপনার সূচকে 1 সারি কত বড়? আপনার প্রচুর ডেটা থাকলে সূচকটি কত বড় হবে? সহজেই স্মৃতিতে এটি খাপ খায়? যদি এটি সূচক হিসাবে অকেজো হয় না।

  4. আপনি কি কখনও মাইএসকিউএল এ এক্সপ্ল্লেইন ব্যবহার করেছেন? গ্রেট। এখন নিজের সাথে সৎ হোন: আপনি যা দেখেছেন তার অর্ধেকটা কি আপনি বুঝতে পেরেছেন? না, আপনি সম্ভবত না। ঠিক কর

  5. আপনি ক্যোয়ারী ক্যাশে বুঝতে পারছেন? আপনি কি জানেন যে কোন ক্যোয়ারীটি আন-ক্যাশেবল করে তোলে?

  6. আপনি মাইআইএসএএম ব্যবহার করছেন? আপনি যদি পুরো পাঠ্যের সন্ধানের প্রয়োজন হয় তবে মাইআইএসএএম এর যেভাবেই হোক না কেন। স্পিংক্স ব্যবহার করুন। তারপরে ইনোতে স্যুইচ করুন।


2
আরও ভাল উপমাটি হতে পারে যে একটি ক্লাচ না বুঝে ম্যানুয়াল ট্রান্সমিশনের সঠিকভাবে সমস্যা সমাধান করতে পারে না । ক্লাচ কীভাবে কাজ করে তা না জেনে প্রচুর লোক সঠিকভাবে একটি স্টিক-শিফট চালান।
মাইকেল ইস্টার

3
  1. বাল্ক আপডেট করতে একটি ORM ব্যবহার করা
  2. প্রয়োজনের চেয়ে বেশি ডেটা নির্বাচন করা। আবার, সাধারণত একটি ORM ব্যবহার করার সময় সম্পন্ন হয়
  3. একটি লুপে গুলি চালাচ্ছে q
  4. ভাল পরীক্ষার ডেটা না থাকা এবং কেবলমাত্র লাইভ ডেটাতে পারফরম্যান্সের অবক্ষয় লক্ষ্য করা।
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.