আপনি শত শত রেকর্ড বা লক্ষ লক্ষ রেকর্ড ধারণ করে এমন একটি ডাটাবেসের সাথে কাজ করছেন কিনা, সঠিক ডাটাবেস নকশা সবসময় গুরুত্বপূর্ণ। এটি কেবল তথ্যকে আরও সহজে পুনরুদ্ধার করবে না, এটি ভবিষ্যতে ডাটাবেস সম্প্রসারণকে সহজ করবে। দুর্ভাগ্যবশত, এটি কয়েক ফাঁদ মধ্যে পড়া সহজ যে ভবিষ্যতে জিনিষ কঠিন করতে পারেন।
একটি ডাটাবেস স্বাভাবিক বিষয় বিষয় লিখিত পুরো বই আছে, কিন্তু আপনি যদি এই সাধারণ ভুল এড়াতে, আপনি ভাল ডাটাবেস নকশা সঠিক ট্র্যাক হতে হবে।
ডাটাবেস ভুল # 1: একটি টেবিল মধ্যে পুনরাবৃত্তি ক্ষেত্র
ভাল ডাটাবেস নকশা জন্য থাম্ব একটি মৌলিক নিয়ম পুনরাবৃত্তি তথ্য স্বীকৃতি এবং তাদের নিজস্ব টেবিল যারা পুনরাবৃত্তি কলাম করা হয়। একটি টেবিলে ক্ষেত্র পুনরাবৃত্তি স্প্রেডশীট বিশ্বের আসা যারা জন্য সাধারণ, কিন্তু স্প্রেডশীট নকশা দ্বারা ফ্ল্যাট ঝোঁক যখন, উপাত্ত সম্পর্কযুক্ত করা উচিত। এটি 2D থেকে 3D তে যাওয়ার মত
সৌভাগ্যক্রমে, পুনরাবৃত্তিমূলক ক্ষেত্র সাধারণত স্পট স্পট হয়। এই টেবিলের দিকে নজর রাখুন:
| OrderID | পণ্য 1 | Product2 | Product3 |
| 1 | খেলনা ভালুক | জেলি বীন | |
| 2 | জেলি বীন |
একটি অর্ডার চার পণ্য আছে যখন কি হবে? আমাদের আরও তিনটি পণ্য সমর্থন করতে টেবিলে আরেকটি ক্ষেত্র যুক্ত করতে হবে। এবং যদি আমরা টেবিলের চারপাশে একটি ক্লায়েন্ট অ্যাপ্লিকেশন তৈরি করেছি যা আমাদের ইনপুট ডেটাতে সহায়তা করে তবে আমাদের নতুন পণ্য ক্ষেত্রের সাথে তা পরিবর্তন করতে হবে। এবং কিভাবে আমরা যাতে Jellybeans সঙ্গে সব আদেশ খুঁজে পেতে পারি? আমরা একটি এসকিউএল বিবৃতি দিয়ে টেবিল মধ্যে প্রতিটি পণ্য ক্ষেত্র জিজ্ঞাসা করতে বাধ্য করা হবে হতে পারে যে হতে পারে: নির্বাচন পণ্য যেখানে পণ্য 1 = 'জেলি বীজ' বা পণ্য2 = 'জেলি বীজ' বা পণ্য 3 = 'জেলি বীন'
একসঙ্গে এমন একটি টেবিলের পরিবর্তে যে সমস্ত তথ্য একত্রিত করে, আমাদের কাছে তিনটি টেবিলের থাকা উচিত যেগুলি প্রত্যেকের একটি স্বতন্ত্র তথ্য ধারণ করে। এই উদাহরণে, আমরা অর্ডারগুলি সম্পর্কে তথ্য সহ একটি অর্ডার টেবিল চাইব, একটি পণ্য সারণি যা আমাদের পণ্যগুলি এবং একটি ProductOrders ট্যাবলেট যা পণ্যগুলিকে অর্ডারের সাথে সংযুক্ত করে।
| OrderID | CustomerID | অর্ডারের তারিখ | মোট |
| 1 | 7 | 1/24/17 | 19.99 |
| 2 | 9 | 1/25/17 | 24,99 |
| পণ্য আইডি | প্রোডাক্ট | গণনা |
| 1 | খেলনা ভালুক | 1 |
| 2 | জেলি বীন | 100 |
| ProductOrderID | পণ্য আইডি | OrderID |
| 101 | 1 | 1 |
| 102 | 2 | 1 |
লক্ষ্য করুন কিভাবে প্রতিটি টেবিলের নিজস্ব অনন্য ID ক্ষেত্র রয়েছে। এটি প্রাথমিক কী। আমরা অন্য টেবিলে বিদেশী কী হিসাবে একটি প্রাথমিক কী মান ব্যবহার করে সারণী লিঙ্ক করি। প্রাথমিক কী এবং বিদেশী কীগুলির সম্বন্ধে আরও পড়ুন।
ডাটাবেস ভুল # 2: একটি সারণিতে একটি টেবিল এম্বেড করা
এটি অন্য একটি সাধারণ ভুল, কিন্তু এটি সবসময় পুনরাবৃত্তিমূলক ক্ষেত্রগুলি যতটা না দাঁড়িয়ে থাকে। একটি ডাটাবেস ডিজাইন করার সময়, আপনি নিশ্চিত করতে চান যে সারণির সমস্ত ডেটা নিজের সাথে সম্পর্কিত। এটা কি ভিন্ন ভিন্ন উদ্ঘাটন সম্পর্কে যে শিশু এর খেলা মত। যদি আপনি একটি কলা, একটি স্ট্রবেরি, একটি পীচ এবং একটি টেলিভিশন সেট আছে, টেলিভিশন সেট সম্ভবত কোথাও অন্য কোথাও।
একই লাইনের পাশে, যদি আপনার কাছে বিক্রয়কারীদের টেবিলে থাকে, সেই সারণির সমস্ত তথ্য বিশেষভাবে সেই বিক্রয় ব্যক্তির সাথে সম্পর্কযুক্ত হওয়া উচিত। যে অতিরিক্ত তথ্য যে বিক্রেতার কাছে অনন্য নয় সে আপনার ডাটাবেসের অন্য কোথাও থাকতে পারে।
| SalesID | প্রথম | গত | ঠিকানা | ফোন নম্বর | দপ্তর | OfficeNumber |
| 1 | স্যাম | এলিয়ট | 118 প্রধান স্ট, অস্টিন, TX | (215) 555-5858 | অস্টিন ডাউনটাউন | (212) 421-2412 |
| 2 | এলিস | সেকরা | 504 দ্বিতীয় রাস্তার, নিউ ইয়র্ক, এনওয়াই | (211) 1২২-18২1 | নিউ ইয়র্ক (পূর্ব) | (211) 855-4541 |
| 3 | জো | প্যারিশ | 428 আকের সেন্ট, অস্টিন, টেক্সাস | (215) 545-5545 | অস্টিন ডাউনটাউন | (212) 421-2412 |
এই টেবিলের মত চেহারা হতে পারে, যদিও এটি সমস্ত ব্যক্তিগত বিক্রেতাদের সাথে সম্পর্কিত, এটি আসলে টেবিলের মধ্যে এমবেড একটি টেবিল আছে। অফিস এবং অফিসের সংখ্যা "অস্টিন ডাউনটাউন" এর সাথে পুনরাবৃত্তি কিভাবে লক্ষ্য করুন। একটি অফিস ফোন নম্বর পরিবর্তন হলে কি হবে? আপনি তথ্য এক একক অবস্থার জন্য তথ্য একটি সম্পূর্ণ সেট আপডেট প্রয়োজন, যা কোন ভাল জিনিস কখনও হয়। এই ক্ষেত্রগুলিকে নিজের টেবিলে সরানো উচিত।
| SalesID | প্রথম | গত | ঠিকানা | ফোন নম্বর | OfficeID |
| 1 | স্যাম | এলিয়ট | 118 প্রধান স্ট, অস্টিন, TX | (215) 555-5858 | 1 |
| 2 | এলিস | সেকরা | 504 দ্বিতীয় রাস্তার, নিউ ইয়র্ক, এনওয়াই | (211) 1২২-18২1 | 2 |
| 3 | জো | প্যারিশ | 428 আকের সেন্ট, অস্টিন, টেক্সাস | (215) 545-5545 | 1 |
| OfficeID | দপ্তর | OfficeNumber |
| 1 | অস্টিন ডাউনটাউন | (212) 421-2412 |
| 2 | নিউ ইয়র্ক (পূর্ব) | (211) 855-4541 |
এই ধরণের ডিজাইনটি আপনাকে অফিসের টেবিলে অতিরিক্ত তথ্য যোগ করার ক্ষমতা প্রদান করে আপনাকে বিক্রেতার টেবিলে ক্লাস্টারের একটি দুঃস্বপ্ন তৈরি না করে। কল্পনা করুন কতটা কাজ রাস্তার ঠিকানা, শহর, রাজ্য এবং জিপ কোড ট্র্যাক রাখতে হবে যদি সব তথ্য বিক্রেতার টেবিলের মধ্যে থাকে!
ডাটাবেস ভুল # 3: একক ক্ষেত্রের মধ্যে তথ্য দুই বা আরও টুকরা নির্বাণ
অফিসে তথ্য টেবিলের মধ্যে তথ্য যোগ করা যে ডাটাবেস সঙ্গে শুধুমাত্র সমস্যা ছিল না। ঠিকানা ক্ষেত্রের তিনটি টুকরা তথ্য রয়েছে: রাস্তার ঠিকানা, শহর এবং রাষ্ট্র। ডাটাবেসের প্রতিটি ক্ষেত্রের মধ্যে কেবল এক একক তথ্য থাকা উচিত। যখন আপনি একক ক্ষেত্রের মধ্যে একাধিক তথ্য সংগ্রহ করেন, তখন তথ্যের জন্য ডাটাবেস জিজ্ঞাসা করা কঠিন হতে পারে।
উদাহরণস্বরূপ, যদি আমরা অস্টিন থেকে সমস্ত বিক্রয় মানুষ জিজ্ঞাসা চালাতে চেয়েছিলেন? আমরা ঠিকানা ক্ষেত্রের মধ্যে অনুসন্ধান করতে হবে, যা শুধুমাত্র অদক্ষ নয়, কিন্তু খারাপ তথ্য ফিরিয়ে দিতে পারে। সব পরে, কি কেউ যদি পোর্টল্যান্ড, অরেগন মধ্যে অস্টিন রাস্তায় বসবাস করতেন?
এখানে টেবিলের মত চেহারা কি:
| SalesID | প্রথম | গত | ঠিকানা 1 | ঠিকানা ২ | শহর | রাষ্ট্র | ফ্যাস্ শব্দ | ফোন |
| 1 | স্যাম | এলিয়ট | 118 প্রধান স্টেশন | অস্টিন | টেক্সাস | 78720 | 2155555858 | |
| 2 | এলিস | সেকরা | 504 দ্বিতীয় স্টে | নিউ ইয়র্ক | এনওয়াই | 10022 | 2111221821 | |
| 3 | জো | প্যারিশ | 428 একর সেন্ট | Apt 304 | অস্টিন | টেক্সাস | 78716 | 2155455545 |
এখানে নোট করার জন্য কয়েকটি জিনিস রয়েছে। প্রথমত, "ঠিকানা 1" এবং "ঠিকানা ২" পুনরাবৃত্তিমূলক ক্ষেত্রগুলির ভুলের মধ্যে পড়ে মনে হতে পারে।
যাইহোক, এই ক্ষেত্রে তারা তাদের পৃথক সারণিতে যেতে হবে যে তথ্য একটি পুনরাবৃত্ত গোষ্ঠীর পরিবর্তে বিক্রয় ব্যক্তি সরাসরি সম্পর্কিত যে তথ্য পৃথক টুকরা উল্লেখ করা হয়।
এছাড়াও, এড়াতে একটি বোনাস ভুল হিসাবে, লক্ষ্য করুন যে ফোন নম্বরের ফর্ম্যাটিংটি টেবিলে কীভাবে ছড়িয়ে পড়েছে। আপনি সম্ভব হলে ক্ষেত্রের বিন্যাস সংরক্ষণ করা উচিত। ফোন নম্বরের ক্ষেত্রে, একাধিক উপায়ে লোকেরা একটি ফোন নম্বর লিখতে পারে: 215-555-5858 অথবা (215) 555-5858। এটি তাদের ফোন নম্বর দ্বারা বিক্রিত ব্যক্তির জন্য অনুসন্ধান করা বা একই এলাকার কোডগুলিতে আরও অনুসন্ধান করা কঠিন করে তুলবে।
ডাটাবেস ভুল # 4: একটি সঠিক প্রাথমিক কী ব্যবহার করে না
বেশিরভাগ ক্ষেত্রে, আপনি আপনার প্রাথমিক কী জন্য স্বয়ংক্রিয়ভাবে বৃদ্ধি সংখ্যা বা অন্য কোনও জেনারেটেড নম্বর বা আলফানিউমেরিক ব্যবহার করতে চান। আপনি প্রাথমিক কী জন্য কোন প্রকৃত তথ্য ব্যবহার করা উচিত এমনকি যদি এটি একটি ভাল শনাক্তকারী করা হবে মত শব্দ।
উদাহরণস্বরূপ, আমাদের প্রত্যেকটির নিজস্ব স্বতন্ত্র সামাজিক নিরাপত্তা নম্বর আছে, সুতরাং একটি কর্মী ডাটাবেসের জন্য সামাজিক নিরাপত্তা নম্বরটি ব্যবহার করা ভালো ধারণা হিসাবে মনে হতে পারে। কিন্তু বিরল যখন, এমনকি একটি সামাজিক নিরাপত্তা নম্বর পরিবর্তন করতে পারে, এবং আমরা আমাদের প্রাথমিক কী পরিবর্তন করতে চাই না।
এবং যে একটি মূল মান হিসাবে প্রকৃত তথ্য ব্যবহার করে সমস্যা। এটা পরিবর্তন করতে পারেন
ডাটাবেজ ভুল # 5: একটি নামকরণ কনভেনশন ব্যবহার না
এটি আপনার পছন্দের ডাটাবেসের নকশা শুরু করার আগে এটি একটি বড় চুক্তি নাও হতে পারে, তবে একবার যখন আপনি তথ্য পুনরুদ্ধারের জন্য ডাটাবেসের বিরুদ্ধে লিখিত প্রশ্নগুলির বিন্দু পেতে পারেন তখন নামকরণের প্রচলন থাকার ফলে ক্ষেত্রের নামগুলি স্মরণ করা হবে।
শুধু একটি টেবিলে LastName নাম এবং First_name, Last_name অন্য টেবিলে, FirstName হিসাবে সংরক্ষণ করা হলে প্রক্রিয়াটি কতটা কঠিন হবে তা কল্পনা করুন।
দুটি সর্বাধিক জনপ্রিয় নামকরণের নিয়মাবলী ক্ষেত্রের প্রতিটি শব্দ প্রথম অক্ষর বা একটি আন্ডারস্কোর ব্যবহার করে শব্দগুলি আলাদা করা হয়। আপনি কিছু ডেভেলপাররা প্রথম শব্দটি ছাড়াও প্রত্যেক শব্দটির প্রথম অক্ষরটি ক্যাপচার করতে পারেন: FirstName, lastName।
আপনি একবচন টেবিল নাম বা বহুবচন টেবিল নাম ব্যবহার করার সিদ্ধান্ত নিতে চান। এটি একটি অর্ডার টেবিল বা একটি অর্ডার টেবিল? এটি একটি কাস্টমার টেবিল বা গ্রাহক টেবিল? আবার, আপনি একটি অর্ডার সারণি এবং একটি গ্রাহক টেবিল সঙ্গে আটকাতে চান না।
আপনি যে নামকরণের প্রচলনটি বেছে নিয়েছিলেন তা আসলেই গুরুত্বপূর্ণ নয় কারণ এটি আসলে নামকরণের প্রচলিত পদ্ধতি এবং পছন্দসই প্রক্রিয়া।
ডাটাবেস ভুল # 6: অনুপযুক্ত ইন্ডেক্সিং
ইনডেক্সিং ডান পেতে সবচেয়ে কঠিন জিনিস এক, বিশেষ করে যারা ডাটাবেস নকশা এ নতুন জন্য। সমস্ত প্রাথমিক কী এবং বিদেশী কী সূচিবদ্ধ করা উচিত। এই কি লিঙ্ক টেবিল একসঙ্গে, তাই একটি সূচক ছাড়াই, আপনি আপনার ডাটাবেসের খুব খারাপ কর্মক্ষমতা দেখতে হবে।
কিন্তু প্রায়ই প্রায়ই মিস করা হয় অন্য ক্ষেত্রগুলি। এই "WHERE" ক্ষেত্রগুলি যদি আপনি প্রায়ই WHERE ক্লোজে একটি ক্ষেত্র ব্যবহার করে আপনার অনুসন্ধান সংকীর্ণ হয়ে যাচ্ছেন, তাহলে আপনি সেই ক্ষেত্রের একটি সূচকে লাগাতে চান। যাইহোক, আপনি টেবিল অতিরিক্তভাবে সূচক করতে চান না, যা কর্মক্ষমতা ক্ষতিগ্রস্ত হতে পারে।
কিভাবে সিদ্ধান্ত নিতে? এটি ডাটাবেসের নকশা শিল্পের অংশ। একটি টেবিলে আপনি কতগুলি সূচী রাখতে হবে তা কোনও হার্ড সীমা নেই। প্রাথমিকভাবে, আপনি যে কোনো ক্ষেত্রকে ইন্ডেক্স করতে চান যা ঘন ঘন WHERE ক্লাবে ব্যবহৃত হয়। সঠিকভাবে আপনার ডাটাবেস সূচী সম্পর্কে আরও পড়ুন।