আমি একটি ডেটাবেস টেবিল তৈরি করছি এবং আমার কাছে এটিতে একটি লজিকাল প্রাথমিক কী বরাদ্দ করা নেই। সুতরাং, আমি এটি একটি প্রাথমিক কী ছাড়াই ছাড়ার কথা ভাবছি তবে আমি এটি সম্পর্কে কিছুটা অপরাধবোধ করছি। আমি কি?
প্রতিটি টেবিলের একটি প্রাথমিক কী থাকা উচিত?
আমি একটি ডেটাবেস টেবিল তৈরি করছি এবং আমার কাছে এটিতে একটি লজিকাল প্রাথমিক কী বরাদ্দ করা নেই। সুতরাং, আমি এটি একটি প্রাথমিক কী ছাড়াই ছাড়ার কথা ভাবছি তবে আমি এটি সম্পর্কে কিছুটা অপরাধবোধ করছি। আমি কি?
প্রতিটি টেবিলের একটি প্রাথমিক কী থাকা উচিত?
উত্তর:
সংক্ষিপ্ত উত্তর: হ্যাঁ ।
দীর্ঘ উত্তর:
মাইএসকিউএল-এ, InnoDB স্টোরেজ ইঞ্জিন সর্বদা একটি প্রাথমিক কী তৈরি করে যদি আপনি এটিকে স্পষ্টভাবে নির্দিষ্ট না করে থাকেন, এইভাবে অতিরিক্ত কলাম তৈরি করে আপনার অ্যাক্সেস নেই।
মনে রাখবেন যে একটি প্রাথমিক কী যৌগিক হতে পারে।
আপনার যদি অনেকগুলি থেকে অনেকগুলি লিঙ্ক টেবিল থাকে তবে আপনি লিঙ্কের সাথে জড়িত সমস্ত ক্ষেত্রে প্রাথমিক কী তৈরি করুন। সুতরাং আপনি নিশ্চিত করেছেন যে আপনার কাছে একটি লিঙ্ক বর্ণনা করে দু'এর বেশি রেকর্ড নেই।
যৌক্তিক ধারাবাহিকতা সমস্যাগুলি ছাড়াও, বেশিরভাগ আরডিবিএমএস ইঞ্জিনগুলি এই ক্ষেত্রগুলিকে একটি অনন্য সূচকে অন্তর্ভুক্ত করে উপকৃত হবে।
যেহেতু যে কোনও প্রাথমিক কীতে একটি অনন্য সূচক তৈরি করা জড়িত, আপনার এটি ঘোষণা করা উচিত এবং যৌক্তিক ধারাবাহিকতা এবং কার্য সম্পাদন উভয়ই পাওয়া উচিত।
আপনি কেন সবসময় অনন্য ডেটাতে একটি অনন্য সূচি তৈরি করতে হবে তা জন্য আমার ব্লগে এই নিবন্ধটি দেখুন:
পিএস কয়েকটি খুব খুব বিশেষ কেস রয়েছে যেখানে আপনার প্রাথমিক কী প্রয়োজন নেই need
বেশিরভাগ ক্ষেত্রে এগুলিতে লগ টেবিল অন্তর্ভুক্ত থাকে যার কার্য সম্পাদনের কারণে কোনও সূচী নেই।
একটি প্রাথমিক কী থাকা সর্বদা সেরা। এইভাবে এটি প্রথম স্বাভাবিক ফর্মটি পূরণ করে এবং আপনাকে ডাটাবেস স্বাভাবিককরণের পথে চালিয়ে যাওয়ার অনুমতি দেয় ।
অন্যরা যেমন বলেছে, প্রাথমিক কী না থাকার কিছু কারণ রয়েছে তবে প্রাথমিক কী থাকলে বেশিরভাগের ক্ষতি করা হবে না
খুব সুন্দর যে কোনও সময় আমি প্রাইমারী কী ছাড়াই একটি টেবিল তৈরি করেছি, ভেবেছিলাম আমার কোনও প্রয়োজন হবে না, আমি ফিরে গিয়ে একটি যুক্ত করে শেষ করেছি। আমি এখন এমন একটি স্বয়ংক্রিয় উত্পন্ন পরিচয় ক্ষেত্রের সাথে এমনকি আমার যোগদানের টেবিলগুলি তৈরি করি যা আমি প্রাথমিক কী হিসাবে ব্যবহার করি।
কয়েকটি খুব বিরল ক্ষেত্রে (সম্ভবত একটি বহু থেকে বহু সম্পর্কের টেবিল বা আপনি যে টেবিলটি সাময়িকভাবে বাল্ক-লোডিংয়ের বিশাল পরিমাণে ডেটা ব্যবহার করতে পারেন) ব্যতীত আমি এই কথার সাথে যাব:
যদি এটির প্রাথমিক কী না থাকে তবে এটি কোনও টেবিল নয়!
আঙ্গুরের ছিরড়া
আপনার কি অন্য টেবিলে এই টেবিলে যোগ দিতে হবে? রেকর্ডটি অনন্যভাবে চিহ্নিত করার জন্য আপনার কি কোনও উপায় দরকার? উত্তরটি হ্যাঁ হলে আপনার একটি প্রাথমিক কী প্রয়োজন need ধরুন আপনার ডেটা গ্রাহক টেবিলের মতো এমন কিছু যা গ্রাহকদের নাম রয়েছে। কোনও প্রাকৃতিক কী নাও থাকতে পারে কারণ এই স্যালি স্মিথ সেই স্যালি স্মিথের চেয়ে আলাদা কিনা তা নির্ধারণ করার জন্য আপনার ঠিকানা, ইমেল, ফোন নম্বর ইত্যাদির প্রয়োজন আছে এবং সেই তথ্যটি সম্পর্কিত টেবিলগুলিতে আপনি সেই তথ্যটি সংরক্ষণ করবেন যেহেতু ব্যক্তিটির বহুবিধ ফোন, অ্যাডিসেস থাকতে পারে , ইমেল ইত্যাদি বিবেচনা করুন স্যালি স্মিথ জন জোনেসকে বিয়ে করেন এবং স্যালি জোন্স হন। আপনি যদি নামটি আপডেট করেন, আপনি যদি টেবিলে কোনও শৈল্পিক কী না পান, আপনি কেবলমাত্র 7 সেলি স্মিথসকে স্যালি জোনেসে পরিবর্তন করেছেন যদিও তাদের মধ্যে কেবল একজনই বিবাহিত হয়েছিলেন এবং তার নাম পরিবর্তন করেছেন।
আপনি বলছেন যে আপনার কাছে কোনও প্রাকৃতিক কী নেই, অতএব আপনার কাছে কোনও অনন্য করে তুলতে ক্ষেত্রের কোনও সংমিশ্রণ নেই, এটি আর্টিফিশিয়াল কীটিকে সমালোচনা করে তোলে।
আমি যে কোনও সময় আমার কাছে কোনও প্রাকৃতিক কী না থাকা সন্ধান পেয়েছি, ডেটা অখণ্ডতা বজায় রাখার জন্য একটি শৈল্পিক কী এক চূড়ান্ত আবশ্যক। যদি আপনার কাছে প্রাকৃতিক কী থাকে তবে আপনি এটিকে পরিবর্তে কী ক্ষেত্র হিসাবে ব্যবহার করতে পারেন। তবে ব্যক্তিগতভাবে যদি না প্রাকৃতিক কী এক ক্ষেত্র হয় তবে আমি প্রাকৃতিক কীতে একটি শৈল্পিক কী এবং অনন্য সূচক পছন্দ করি। আপনি এটি পরে না রাখলে পরে আফসোস করবেন।
প্রতিটি টেবিলে একটি পিকে রাখা ভাল অনুশীলন, তবে এটি খুব বেশি নয়। আপনার প্রয়োজনের উপর নির্ভর করে আপনার সম্ভবত একটি অনন্য সূচক এবং / অথবা একটি ক্লাস্টারড সূচক (যা পিকে বা না) প্রয়োজন।
বই অনলাইন (এসকিউএল সার্ভারের জন্য) এ প্রাথমিক কী এবং ক্লাস্টারযুক্ত সূচী বিভাগগুলি দেখুন
" প্রাথমিক কেই কলাম বা কলামগুলির সেটকে সনাক্ত করতে বাধা দেয় যা মানগুলি একটি টেবিলের মধ্যে স্বতন্ত্রভাবে একটি সারি চিহ্নিত করে। একটি টেবিলের কোনও দুটি সারিতে একই প্রাথমিক কী মান থাকতে পারে না You আপনি কোনও প্রাথমিক কীতে কোনও কলামের জন্য NULL প্রবেশ করতে পারবেন না We একটি ছোট, পূর্ণসংখ্যা কলামটি প্রাথমিক কী হিসাবে ব্যবহার করার পরামর্শ দেয় Each প্রতিটি টেবিলের একটি প্রাথমিক কী থাকা উচিত primary একটি কলাম বা কলামগুলির সংমিশ্রণ যা প্রাথমিক কী মান হিসাবে যোগ্যতা অর্জন করে তাকে প্রার্থী কী হিসাবে উল্লেখ করা হয়। "
তবে তারপরেও এটি পরীক্ষা করে দেখুন: http://www.aisintl.com/case/primary_and_foreign_key.html
প্রস্তাবিত উত্তরের সাথে দ্বিমত পোষণ করুন। সংক্ষিপ্ত উত্তরটি হ'ল: না ।
প্রাথমিক কীটির উদ্দেশ্য হ'ল অন্য টেবিলের সাথে সম্পর্ক স্থাপনের জন্য টেবিলে একটি সারি স্বতন্ত্রভাবে চিহ্নিত করা। Ditionতিহ্যগতভাবে, একটি স্ব-বর্ধিত পূর্ণসংখ্যার মানটি এই উদ্দেশ্যে ব্যবহৃত হয়, তবে এর বিভিন্নতা রয়েছে।
যদিও কিছু ক্ষেত্রে রয়েছে, উদাহরণস্বরূপ সময়-সিরিজের ডেটা লগ করা, যেখানে এই জাতীয় কীটির অস্তিত্ব কেবল প্রয়োজন হয় না এবং কেবল স্মৃতি গ্রহণ করে। একটি সারি অনন্য করা সহজ ... প্রয়োজন হয় না!
একটি ছোট উদাহরণ: টেবিল এ: লগডেটা
Columns: DateAndTime, UserId, AttribA, AttribB, AttribC etc...
কোনও প্রাথমিক কী প্রয়োজন নেই।
সারণি বি: ব্যবহারকারী
Columns: Id, FirstName, LastName etc.
লগডাটা টেবিলে "বিদেশী কী" হিসাবে ব্যবহার করার জন্য প্রাথমিক কী (আইডি) প্রয়োজন।
আমি জানি যে .NET এ গ্রিডভিউয়ের কয়েকটি বৈশিষ্ট্য ব্যবহার করার জন্য, গ্রিডভিউটি জানতে কোন সারিটি আপডেট / মুছে ফেলার প্রয়োজন তা জানতে আপনার একটি প্রাথমিক কী প্রয়োজন। সাধারণ অনুশীলনের একটি প্রাথমিক কী বা প্রাথমিক কী ক্লাস্টার থাকা উচিত। আমি ব্যক্তিগতভাবে প্রাক্তনটিকে পছন্দ করি।
ভবিষ্যতের প্রমাণ হিসাবে এটি আপনার করা উচিত। আপনি যদি এটির অনুলিপি করতে চান তবে আপনার একটি প্রয়োজন। আপনি যদি এটি অন্য টেবিলে যোগ দিতে চান তবে আপনার জীবন (এবং পরের বছর এটি বজায় রাখতে হবে এমন দরিদ্র বোকা লোকদের) এত সহজ হয়ে যাবে।
আমি অফশোর উন্নয়ন দল দ্বারা নির্মিত অ্যাপ্লিকেশন বজায় রাখার ভূমিকায় আছি। এখন অ্যাপ্লিকেশনটিতে আমার কাছে সমস্ত ধরণের সমস্যা হচ্ছে কারণ মূল ডাটাবেস স্কিমাতে কিছু টেবিলে প্রাথমিক কী নেই E সুতরাং দয়া করে আপনার দুর্বল ডিজাইনের কারণে অন্য লোককে কষ্ট না দিন। টেবিলে প্রাথমিক কী থাকা সর্বদা ভাল ধারণা।
আমার সবসময় একটি প্রাথমিক কী থাকে, যদিও শুরুতে আমার এটির জন্য এখনও কোনও উদ্দেশ্য মনে না করে। কয়েকবার এমন হয়েছে যখন আমার শেষ পর্যন্ত কোনও টেবিলের মধ্যে পিকে লাগবে যার একটি নেই এবং এটি পরে রাখার ক্ষেত্রে সবসময় আরও বেশি সমস্যা হয়। আমি মনে করি সর্বদা একটিকে অন্তর্ভুক্ত করার জন্য আরও কিছু উল্টো রয়েছে।
সংক্ষেপে, না। তবে আপনাকে অবশ্যই মনে রাখতে হবে যে নির্দিষ্ট ক্লায়েন্টের অ্যাক্সেস সিআরইউডি অপারেশনগুলির এটির প্রয়োজন। ভবিষ্যতের প্রুফিংয়ের জন্য, আমি সর্বদা প্রাথমিক কীগুলি ব্যবহার করার প্রবণতা রাখি।
আপনি যদি হাইবারনেট ব্যবহার করেন তবে প্রাথমিক কী ছাড়া কোনও সত্তা তৈরি করা সম্ভব নয়। আপনি যদি বিদ্যমান প্যাকেজ / ডিডিএল স্ক্রিপ্ট দিয়ে তৈরি একটি বিদ্যমান ডাটাবেস নিয়ে কাজ করছেন এবং কোনও প্রাথমিক কী যুক্ত করা হয়নি তবে এই সমস্যাগুলি সমস্যা তৈরি করতে পারে