প্রতিটি টেবিলের একটি প্রাথমিক কী থাকা উচিত?


340

আমি একটি ডেটাবেস টেবিল তৈরি করছি এবং আমার কাছে এটিতে একটি লজিকাল প্রাথমিক কী বরাদ্দ করা নেই। সুতরাং, আমি এটি একটি প্রাথমিক কী ছাড়াই ছাড়ার কথা ভাবছি তবে আমি এটি সম্পর্কে কিছুটা অপরাধবোধ করছি। আমি কি?

প্রতিটি টেবিলের একটি প্রাথমিক কী থাকা উচিত?


5
আপনি টেবিল সম্পর্কে আরও কিছু বিবরণ দিতে পারেন? উত্তর সম্ভবত "হ্যাঁ" যদিও।
রায়ান বায়ার

7
হ্যাঁ, প্রতিটি টেবিলে প্রাথমিক কী থাকা উচিত।
সৈয়দ তৈয়ব আলী

উত্তর:


313

সংক্ষিপ্ত উত্তর: হ্যাঁ

দীর্ঘ উত্তর:

  • আপনার কোনও কিছুর সাথে যুক্ত হতে আপনার টেবিলটি দরকার
  • আপনি যদি নিজের টেবিলটি ক্লাস্টার করতে চান তবে আপনার এক প্রকার প্রাথমিক কী প্রয়োজন।
  • যদি আপনার টেবিল ডিজাইনের কোনও প্রাথমিক কী প্রয়োজন হয় না, আপনার নকশাকে পুনর্বিবেচনা করুন: সম্ভবত, আপনি কিছু অনুপস্থিত। অভিন্ন রেকর্ড রাখবেন কেন?

মাইএসকিউএল-এ, InnoDB স্টোরেজ ইঞ্জিন সর্বদা একটি প্রাথমিক কী তৈরি করে যদি আপনি এটিকে স্পষ্টভাবে নির্দিষ্ট না করে থাকেন, এইভাবে অতিরিক্ত কলাম তৈরি করে আপনার অ্যাক্সেস নেই।

মনে রাখবেন যে একটি প্রাথমিক কী যৌগিক হতে পারে।

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

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

যেহেতু যে কোনও প্রাথমিক কীতে একটি অনন্য সূচক তৈরি করা জড়িত, আপনার এটি ঘোষণা করা উচিত এবং যৌক্তিক ধারাবাহিকতা এবং কার্য সম্পাদন উভয়ই পাওয়া উচিত।

আপনি কেন সবসময় অনন্য ডেটাতে একটি অনন্য সূচি তৈরি করতে হবে তা জন্য আমার ব্লগে এই নিবন্ধটি দেখুন:

পিএস কয়েকটি খুব খুব বিশেষ কেস রয়েছে যেখানে আপনার প্রাথমিক কী প্রয়োজন নেই need

বেশিরভাগ ক্ষেত্রে এগুলিতে লগ টেবিল অন্তর্ভুক্ত থাকে যার কার্য সম্পাদনের কারণে কোনও সূচী নেই।


তাদের এখনও একটি প্রাথমিক কী রয়েছে, যৌথ এক
ক্রিস্টফ

2
@ নানকাতা: তাদের একটি যৌগিক প্রাথমিক কী থাকা উচিত
কোসনোই

1
"এবং যেহেতু যে কোনও প্রাথমিক কীতে একটি অনন্য সূচক তৈরি করা জড়িত" ওরাকল এর পক্ষে সত্য নয়। একটি প্রাথমিক কী প্রয়োগ করতে কেউ অ-অনন্য সূচক ব্যবহার করতে পারেন। আসলে, কখনও কখনও এটি প্রয়োজনীয় যে অনন্য এবং পিকে সীমাবদ্ধতা অ-অনন্য সূচকগুলি ব্যবহার করে।
স্টেফানি পৃষ্ঠা

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

1
কীগুলির সাথে যোগব্যবস্থার কোনও সম্পর্ক নেই। এবং ক্লাস্টারিং যুক্তি নির্ভর করে আপনি কোন ডিবিএমএস ব্যবহার করেন তার উপর নির্ভর করে এবং যৌক্তিক এবং শারীরিক বিবেচনার মিশ্রণ করে।
জন হিগল্যান্ড

36

একটি প্রাথমিক কী থাকা সর্বদা সেরা। এইভাবে এটি প্রথম স্বাভাবিক ফর্মটি পূরণ করে এবং আপনাকে ডাটাবেস স্বাভাবিককরণের পথে চালিয়ে যাওয়ার অনুমতি দেয় ।

অন্যরা যেমন বলেছে, প্রাথমিক কী না থাকার কিছু কারণ রয়েছে তবে প্রাথমিক কী থাকলে বেশিরভাগের ক্ষতি করা হবে না


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

13

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


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

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

13

কয়েকটি খুব বিরল ক্ষেত্রে (সম্ভবত একটি বহু থেকে বহু সম্পর্কের টেবিল বা আপনি যে টেবিলটি সাময়িকভাবে বাল্ক-লোডিংয়ের বিশাল পরিমাণে ডেটা ব্যবহার করতে পারেন) ব্যতীত আমি এই কথার সাথে যাব:

যদি এটির প্রাথমিক কী না থাকে তবে এটি কোনও টেবিল নয়!

আঙ্গুরের ছিরড়া


10
কড়া কথা বলতে গেলে এই বাক্যটি ভুল। টেবিলগুলি আপনার ক্যোয়ারী ল্যাঙ্গুয়েজ দ্বারা নির্মিত "দেখুন সারণী" হতে পারে। একটি আরডিবিএমএস টেবিল নয় সম্পর্কের সমন্বয়ে গঠিত। এই বাক্যে বলা উচিত: "যদি এটির প্রাথমিক কী না থাকে তবে এটি কোনও সম্পর্ক নয়!"!
স্টিভেক

অথবা সম্ভবত, "যদি প্রার্থী কী না থাকে তবে এটি কোনও সম্পর্কিত টেবিল নয়"। তবে খুব বিরল ক্ষেত্রে দেখুন যেখানে কোনও টেবিল রাখা ঠিক আছে যা কোনও সম্পর্কের প্রতিনিধিত্ব করে না।
ওয়াল্টার মিট্টি

কেন একটি বহু থেকে টেবিলের একটি প্রাথমিক কী থাকবে না? আপনি একটি পৃথক প্রাথমিক কী তৈরি করতে পারেন এবং তারপরে বিদেশী কীগুলির সারোগেটের জন্য একটি অনন্য সূচক তৈরি করতে পারেন। আমি মনে করি প্রতিটি টেবিলে একটি প্রাথমিক কী থাকা ভাল। এমনকি একটি বাল্ক লোডিং টেবিলের উপরেও আপনি আলাদাভাবে এমন একটি প্রাথমিক কীটি সনাক্ত করতে চাইতে পারেন যা ডেটা আমদানি করাতে অন্তর্ভুক্ত নয় কারণ এটি আপনাকে একটি ইটিএল প্রক্রিয়াতে নকল রেকর্ড সনাক্ত করতে সহায়তা করতে পারে। আমার কাছে মনে হয় যে প্রতিটি টেবিলের এখনও কিছুটা বেশি সঞ্চয়স্থান থাকা সত্ত্বেও একটি প্রাথমিক কী থাকা উচিত। একটি দৃশ্যের দ্বারা তৈরি একটি সারণি হ'ল একটি টেবিলের একটি উপসেট itself
জন আর্নেস্ট

1
অনেকগুলি থেকে অনেকগুলি টেবিলের মধ্যে, আপনি সম্পর্কের দুটি আইডির সমন্বিত একটি সমন্বিত প্রাথমিক কী তৈরি করতে পারেন।
যাপ

8

কেবল এটি যুক্ত করুন, পরে যখন আপনি করবেন না তখন আপনি দুঃখিত হবেন (নির্বাচন, মোছা, লিঙ্কিং ইত্যাদি)


8

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

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

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


6

প্রতিটি টেবিলে একটি পিকে রাখা ভাল অনুশীলন, তবে এটি খুব বেশি নয়। আপনার প্রয়োজনের উপর নির্ভর করে আপনার সম্ভবত একটি অনন্য সূচক এবং / অথবা একটি ক্লাস্টারড সূচক (যা পিকে বা না) প্রয়োজন।

বই অনলাইন (এসকিউএল সার্ভারের জন্য) এ প্রাথমিক কী এবং ক্লাস্টারযুক্ত সূচী বিভাগগুলি দেখুন

" প্রাথমিক কেই কলাম বা কলামগুলির সেটকে সনাক্ত করতে বাধা দেয় যা মানগুলি একটি টেবিলের মধ্যে স্বতন্ত্রভাবে একটি সারি চিহ্নিত করে। একটি টেবিলের কোনও দুটি সারিতে একই প্রাথমিক কী মান থাকতে পারে না You আপনি কোনও প্রাথমিক কীতে কোনও কলামের জন্য NULL প্রবেশ করতে পারবেন না We একটি ছোট, পূর্ণসংখ্যা কলামটি প্রাথমিক কী হিসাবে ব্যবহার করার পরামর্শ দেয় Each প্রতিটি টেবিলের একটি প্রাথমিক কী থাকা উচিত primary একটি কলাম বা কলামগুলির সংমিশ্রণ যা প্রাথমিক কী মান হিসাবে যোগ্যতা অর্জন করে তাকে প্রার্থী কী হিসাবে উল্লেখ করা হয়। "

তবে তারপরেও এটি পরীক্ষা করে দেখুন: http://www.aisintl.com/case/primary_and_foreign_key.html



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

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

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

1
মনে রাখবেন যে জিইউডিটি পিকে-র জন্য কোনও অনুকূল ধরণের নয়, ইনোডিবি-তে। সমস্ত সূচিতে পিকে সম্পর্কিত একটি রেফারেন্স থাকে সুতরাং বড়টি পিকে হয়, বড় অন্য সমস্ত সূচী হয়।
ফেডেরিকো রাজ্জোলি

6

প্রস্তাবিত উত্তরের সাথে দ্বিমত পোষণ করুন। সংক্ষিপ্ত উত্তরটি হ'ল: না

প্রাথমিক কীটির উদ্দেশ্য হ'ল অন্য টেবিলের সাথে সম্পর্ক স্থাপনের জন্য টেবিলে একটি সারি স্বতন্ত্রভাবে চিহ্নিত করা। Ditionতিহ্যগতভাবে, একটি স্ব-বর্ধিত পূর্ণসংখ্যার মানটি এই উদ্দেশ্যে ব্যবহৃত হয়, তবে এর বিভিন্নতা রয়েছে।

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

একটি ছোট উদাহরণ: টেবিল এ: লগডেটা

Columns:  DateAndTime, UserId, AttribA, AttribB, AttribC etc...

কোনও প্রাথমিক কী প্রয়োজন নেই।

সারণি বি: ব্যবহারকারী

Columns: Id, FirstName, LastName etc. 

লগডাটা টেবিলে "বিদেশী কী" হিসাবে ব্যবহার করার জন্য প্রাথমিক কী (আইডি) প্রয়োজন।


3

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


3

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


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

3

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


2

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


1

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


1

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

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