আপনি যদি এমন ডেটাবেস নিয়ে কাজ করেন যা শত শত রেকর্ড বা লক্ষ লক্ষ রেকর্ড ধারণ করে তবে সঠিক ডেটাবেস নকশা সর্বদা গুরুত্বপূর্ণ। এটি কেবল তথ্যটিকে আরও সহজ করে তুলবে না, এটি ভবিষ্যতে ডেটাবেস প্রসারিত করতে আরও সহজ করবে। দুর্ভাগ্যবশত, কয়েকটি ফাঁদে পড়ে যাওয়া সহজ যা ভবিষ্যতে জিনিসগুলিকে কঠিন করে তুলতে পারে।
একটি ডাটাবেস স্বাভাবিককরণের বিষয়টিতে সম্পূর্ণ বই লেখা আছে, তবে যদি আপনি এখানে দেখানো সাধারণ ভুলগুলি এড়ান তবে আপনি ভাল ডেটাবেস ডিজাইনের সঠিক পথে থাকবেন।
ডাটাবেস ভুল # 1: একটি টেবিলের মধ্যে ক্ষেত্র পুনরাবৃত্তি
ভাল ডাটাবেস নকশা জন্য থাম্ব একটি মৌলিক নিয়ম পুনরাবৃত্তি তথ্য সনাক্ত করা এবং তাদের পুনরাবৃত্তি কলাম তাদের নিজস্ব টেবিলে রাখা হয়। স্প্রেডশীটগুলির বিশ্ব থেকে আসা যারা টেবিলে ক্ষেত্রগুলি পুনরাবৃত্তি করা সাধারণ, কিন্তু স্প্রেডশিটগুলি নকশা দ্বারা সমতল হতে থাকে তবে ডেটাবেসগুলি সম্পর্কযুক্ত হওয়া উচিত। এটা ২ ডি থেকে 3 ডি তে যাচ্ছে।
সৌভাগ্যক্রমে, পুনরাবৃত্তি ক্ষেত্র সাধারণত স্পট সহজ। শুধু এই টেবিলে একটি চেহারা নিতে:
OrderID | পণ্য 1 | Product2 | Product3 |
1 | খেলনা ভালুক | জেলি Beans | |
2 | জেলি Beans |
একটি আদেশ চার পণ্য রয়েছে যখন কি হবে? আমরা তিনটি পণ্য সমর্থন করার জন্য টেবিলে আরেকটি ক্ষেত্র যুক্ত করতে হবে। এবং যদি আমরা ইনপুট ডেটাতে সহায়তা করতে টেবিলের চারপাশে একটি ক্লায়েন্ট অ্যাপ্লিকেশন তৈরি করেছি, তবে আমাদের নতুন পণ্য ক্ষেত্রের সাথে এটি সংশোধন করতে হবে। এবং কিভাবে আদেশে জেলিবিন্সের সাথে আমরা সব আদেশ পাই? আমাদেরকে এমন একটি এসকিউএল স্টেটমেন্ট সহ টেবিলের প্রতিটি পণ্য ক্ষেত্রের সাথে জিজ্ঞাসা করতে বাধ্য করা হবে যা পছন্দ হতে পারে: নির্বাচন করুন * পণ্যগুলি থেকে পণ্য 1 = 'জেলি বীনস' বা পণ্য 2 = 'জেলি বীনস' বা পণ্য 3 = 'জেলি বীনস'।
একক টেবিল রাখার পরিবর্তে সমস্ত তথ্য একত্রিত করে, আমাদের তিনটি টেবিল থাকা উচিত যাতে প্রত্যেকের একটি স্বতন্ত্র তথ্য থাকে। এই উদাহরণে, আমরা আদেশের তথ্য, আমাদের সমস্ত পণ্য এবং পণ্যদ্রব্য ট্যাবলেটের সাথে পণ্য সম্পর্কিত লিঙ্কগুলির একটি পণ্য সারণী সম্পর্কে একটি অর্ডার টেবিল চাই।
OrderID | CustomerID | অর্ডারের তারিখ | মোট |
1 | 7 | 1/24/17 | 19.99 |
2 | 9 | 1/25/17 | 24.99 |
পণ্যের আইডি | প্রোডাক্ট | গণনা |
1 | খেলনা ভালুক | 1 |
2 | জেলি Beans | 100 |
ProductOrderID | পণ্যের আইডি | OrderID |
101 | 1 | 1 |
102 | 2 | 1 |
প্রতিটি টেবিল তার নিজস্ব অনন্য আইডি ক্ষেত্র আছে কিভাবে লক্ষ্য করুন। এটি প্রাথমিক কী। আমরা অন্য টেবিলে একটি বিদেশী কী হিসাবে একটি প্রাথমিক কী মান ব্যবহার করে টেবিল লিঙ্ক। প্রাথমিক কী এবং বিদেশী কী সম্পর্কে আরও পড়ুন।
ডাটাবেস ভুল # 2: একটি সারণিতে একটি সারণি এমবেড করা
এটি অন্য একটি সাধারণ ভুল, কিন্তু এটি সর্বদা যতটা পুনরাবৃত্তিমূলক ক্ষেত্রের বাইরে দাঁড়িয়ে থাকে না। একটি ডাটাবেস ডিজাইন করার সময়, আপনি নিশ্চিত করতে চান যে একটি টেবিলের সমস্ত ডেটা নিজেই সম্পর্কিত। এটি কি আলাদা আলাদা আলাদা জিনিস সম্পর্কে সন্তানের খেলা। আপনার যদি কলা, স্ট্রবেরি, পিচ এবং একটি টেলিভিশন সেট থাকে তবে টেলিভিশন সেট সম্ভবত অন্য কোথাও থাকে।
একই লাইনের পাশাপাশি, যদি আপনার কাছে বিক্রয়কারীর একটি টেবিল থাকে তবে সেই টেবিলের সমস্ত তথ্য বিশেষভাবে সেই বিক্রয় ব্যক্তির সাথে সম্পর্কিত হওয়া উচিত। যে কোনও অতিরিক্ত তথ্য যা বিক্রয়কারীর কাছে অনন্য নয় তা আপনার ডাটাবেসের অন্য কোথাও থাকতে পারে।
SalesID | প্রথম | গত | ঠিকানা | ফোন নম্বর | দপ্তর | OfficeNumber |
1 | স্যাম | এলিয়ট | 118 মুখ্য সেন্ট, অস্টিন, TX | (215) 555-5858 | অস্টিন ডাউনটাউন | (212) 421-2412 |
2 | এলিস | সেকরা | 504 দ্বিতীয় রাস্তার, নিউ ইয়র্ক, এনওয়াই | (211) 122-1821 | নিউ ইয়র্ক (পূর্ব) | (211) 855-4541 |
3 | জো | প্যারিশ | 428 আকার সেন্ট, অস্টিন, TX | (215) 545-5545 | অস্টিন ডাউনটাউন | (212) 421-2412 |
এই টেবিলের মতো এটি সমস্ত ব্যক্তিগত বিক্রয়কারীর সাথে সম্পর্কিত, এটি আসলে টেবিলের মধ্যে এমবেড হওয়া একটি টেবিল রয়েছে। "অস্টিন ডাউনটাউন" এর সাথে অফিস এবং অফিসNumber পুনরাবৃত্তি কিভাবে লক্ষ্য করুন। একটি অফিস ফোন নম্বর পরিবর্তন হলে কি হবে? আপনি তথ্য পরিবর্তন এক একক টুকরা জন্য একটি সম্পূর্ণ সেট তথ্য আপডেট করতে হবে, যা একটি ভাল জিনিস না। এই ক্ষেত্র তাদের নিজস্ব টেবিলে সরানো উচিত।
SalesID | প্রথম | গত | ঠিকানা | ফোন নম্বর | OfficeID |
1 | স্যাম | এলিয়ট | 118 মুখ্য সেন্ট, অস্টিন, TX | (215) 555-5858 | 1 |
2 | এলিস | সেকরা | 504 দ্বিতীয় রাস্তার, নিউ ইয়র্ক, এনওয়াই | (211) 122-1821 | 2 |
3 | জো | প্যারিশ | 428 আকার সেন্ট, অস্টিন, TX | (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 আক্তার সেন্ট | আপাত 304 | অস্টিন | টেক্সাস | 78716 | 2155455545 |
এখানে নোট কিছু জিনিস আছে।প্রথম, "ঠিকানা 1" এবং "ঠিকানা 2" পুনরাবৃত্তি ক্ষেত্রের ভুলের অধীনে পড়ে বলে মনে হয়।
যাইহোক, এই ক্ষেত্রে তারা তথ্যগুলির একটি পৃথক গোষ্ঠী যা তার নিজস্ব টেবিলের মধ্যে যাওয়া উচিত তার পুনরাবৃত্তি গোষ্ঠীটির পরিবর্তে ডেটা পৃথক পৃথকভাবে উল্লেখ করে।
এছাড়াও, এড়াতে একটি বোনাস ভুল হিসাবে, টেবিলে ফোন নম্বরটির ফর্ম্যাটিং কীভাবে ফাঁস হয়ে গেছে তা লক্ষ্য করুন। আপনি সম্ভব যখন ক্ষেত্রের বিন্যাস সংরক্ষণ এড়াতে হবে। ফোন নম্বরগুলির ক্ষেত্রে, লোকেরা একাধিক উপায়ে ফোন নম্বর লিখে থাকে: 215-555-5858 অথবা (215) 555-5858। এটি তাদের ফোন নাম্বার দ্বারা বিক্রয়কারীর জন্য অনুসন্ধান করা বা একই এলাকার কোডগুলিতে লোকেদের বিক্রয় অনুসন্ধান আরো কঠিন করে তুলবে।
ডাটাবেস ভুল # 4: একটি সঠিক প্রাথমিক কী ব্যবহার করে না
বেশিরভাগ ক্ষেত্রে, আপনি আপনার প্রাথমিক কীটির জন্য স্বয়ংক্রিয়ভাবে ক্রমবর্ধমান সংখ্যা বা অন্য কোনও জেনারেটেড সংখ্যা বা আলফানিউমেরিক ব্যবহার করতে চান। প্রাথমিক কীটির জন্য যে কোনও প্রকৃত তথ্য ব্যবহার করা এড়িয়ে চলতে থাকা উচিত, এমনকি যদি এটি ভালো শনাক্তকারী হিসাবে মনে হয়।
উদাহরণস্বরূপ, আমাদের প্রত্যেকের নিজস্ব নিজস্ব সামাজিক নিরাপত্তা নম্বর রয়েছে, তাই একজন কর্মচারী ডেটাবেসের জন্য সোশ্যাল সিকিউরিটি নম্বর ব্যবহার করে একটি ভাল ধারণা মত শব্দ হতে পারে। কিন্তু বিরল হলেও, সামাজিক সুরক্ষা নম্বর এমনকি পরিবর্তন করা সম্ভব, এবং আমরা আমাদের প্রাথমিক কী পরিবর্তন করতে চাই না।
এবং যে একটি মূল মান হিসাবে প্রকৃত তথ্য ব্যবহার সঙ্গে সমস্যা। এটা পরিবর্তন করতে পারেন।
ডাটাবেস ভুল # 5: একটি নামকরণ কনভেনশন ব্যবহার করে না
এটি প্রথমে আপনার ডেটাবেস ডিজাইন করা শুরু করার সময় একটি বড় চুক্তি হিসাবে শব্দ নাও হতে পারে, তবে একবার তথ্য পুনরুদ্ধারের জন্য ডাটাবেসের বিরুদ্ধে লিখিত প্রশ্নগুলি পেতে গেলে, নামকরণের একটি কনভেনশন থাকার ক্ষেত্রে আপনি ক্ষেত্রের নামগুলি মনে রাখতে সহায়তা করবেন।
শুধু প্রথম নাম হিসাবে সংরক্ষণ করা হয়েছে, প্রক্রিয়াটি যদি এক টেবিলে LastName এবং first_name, অন্য টেবিলে last_name হিসাবে প্রক্রিয়াটি কত কঠিন হবে তা কল্পনা করুন।
দুটি সবচেয়ে জনপ্রিয় নামকরণ সম্মেলনগুলি ক্ষেত্রের প্রতিটি শব্দের প্রথম অক্ষরকে পুঁজি করে বা আন্ডারস্কোর ব্যবহার করে শব্দগুলি আলাদা করে। প্রথম শব্দটি বাদ দিয়ে আপনি প্রতিটি শব্দের প্রথম অক্ষরকে মূলধন capitalizing কিছু ডেভেলপার দেখতে পারেন: firstName, lastName।
আপনি একবচন টেবিল নাম বা বহুবচন টেবিল নাম ব্যবহার করার সিদ্ধান্ত নিতে চান। এটি একটি অর্ডার টেবিল বা একটি আদেশ টেবিল? এটি একটি গ্রাহক টেবিল বা গ্রাহক টেবিল? আবার, আপনি একটি অর্ডার টেবিল এবং একটি গ্রাহক টেবিল আটকে করতে চান না।
আপনার চয়ন করা নামকরণের কনভেনশনটি প্রকৃতপক্ষে একটি নামকরণের কনভেনশন নির্বাচন এবং স্টিক করার প্রক্রিয়া হিসাবে গুরুত্বপূর্ণ নয়।
ডাটাবেস ভুল # 6: অপ্রচলিত সূচক
ইন্ডেক্সিং সবচেয়ে কঠিন বিষয়গুলির মধ্যে একটি, বিশেষ করে ডাটাবেসের নকশাতে নতুনগুলির জন্য। সমস্ত প্রাথমিক কী এবং বিদেশী কী সূচী করা উচিত। এই লিঙ্কগুলি একসঙ্গে কি টেবিলে আছে, তাই একটি সূচী ছাড়া, আপনি আপনার ডাটাবেসের বাইরে খুব খারাপ কর্মক্ষমতা দেখতে পাবেন।
কিন্তু খুব প্রায়ই মিস করবেন অন্যান্য ক্ষেত্র। এই "যেখানে" ক্ষেত্র। যদি আপনি প্রায়ই WHERE বিভাগে একটি ক্ষেত্র ব্যবহার করে আপনার অনুসন্ধান সংকীর্ণ করতে যাচ্ছেন, তবে আপনি সেই ক্ষেত্রটিতে একটি সূচী নির্বাণ করার বিষয়ে ভাবতে চান। যাইহোক, আপনি অতিরিক্ত টেবিল সূচী করতে চান না, যা কর্মক্ষমতা ক্ষতি করতে পারে।
কিভাবে সিদ্ধান্ত নিতে হবে? এটি ডাটাবেসের নকশা শিল্পের অংশ। আপনি একটি টেবিলের উপর কত সূচী রাখা উচিত কোন কঠোর সীমা নেই। প্রাথমিকভাবে, আপনি কোনও ক্ষেত্রকে সূচী করতে চান যা প্রায়শই WHERE বিভাগে ব্যবহৃত হয়। সঠিকভাবে আপনার ডাটাবেস সূচী সম্পর্কে আরও পড়ুন।