একটি প্রাথমিক কী কি অপরিবর্তনীয় হওয়া উচিত?


26

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

সুতরাং আমার প্রশ্নটি হ'ল: প্রাথমিক কী কী বদলে যেতে পারে তা কি এখনও খারাপ অভ্যাস? পরিবর্তনীয় প্রাথমিক কী থাকার বিধানগুলি, যদি থাকে তবে কী কী?

উত্তর:


25

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

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


7
কেন আপনি "না প্রয়োজন যদি এটি একটি বিদেশী কী লিঙ্ক এর অপরিবর্তনীয় হতে প্রাথমিক কী"? ওপি যেমন উল্লেখ করেছে, বেশিরভাগ আরডিবিএমএসের "ক্যাসকেড" আপডেট বৈশিষ্ট্য রয়েছে।
থানাটোস

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

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

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

4
@ ইউজার 61852: কি?
গুফা

15

স্বতন্ত্রতা নির্ধারণের জন্য যে টিউপলগুলি প্রয়োজনীয় তা নিয়ে একটি প্রাথমিক কী থাকা উচিত । ডেটা পরিবর্তন করতে পারে কিনা তা অপ্রাসঙ্গিক। কেবল রেকর্ডের বিষয়গুলির স্বাতন্ত্র্য। এটি ডাটাবেসের ধারণাগত নকশা।

যখন আমরা বাস্তবায়নের ক্ষেত্রের দিকে চলে যাই, তখন সবচেয়ে নিরাপদ কাজটি হ'ল সরোগেট কী ব্যবহার করা।


15

হ্যাঁ, আমার মতে একটি প্রাথমিক কী অপরিবর্তনীয় হওয়া উচিত।

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


ডেটা-এন্ট্রি ত্রুটি সম্পর্কে ভাল পয়েন্ট
টিম গুডম্যান

রিহিম, মনে হচ্ছে আপনি কী তৈরি করছেন তা কীগুলি অনিবার্য নয়: ব্যবহারকারীরা সেগুলি পরিবর্তন করতে পারেন।
nvogel

4
@ ডোর্টাস - আমার বক্তব্যটি হ'ল আমি পিকে অপরিবর্তনীয় হতে চাই তাই সর্বদা সারোগেট কীগুলি ব্যবহার করি এমনকি যদি আমি ভাবি যে টেবিলের ডেটা (যেমন ইমেল, ব্যবহারকারীর নাম) থেকে প্রাপ্ত কোনও সুস্পষ্ট কী আছে।
রিচিয়াম

2

প্রাথমিক কীগুলি পরিবর্তিত হলে ডাটাবেস এবং ব্যবহারকারীর মধ্যে ক্যাচিং ব্যবস্থা কার্যকরতা হারাবে।


2

কেন না? কারণ আপনি একটি কলামটি মুছে ফেলতে চান?

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

আমি প্রয়োগ করি এমন প্রতিটি ক্যাসকেড আপডেট এবং আমি নিজে কোড করে দিলে বোনাসের জন্য আমি অর্থ প্রদান করি না।

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


1
"কীগুলি কম্পিউটারের জন্য, লোকেরা বাকী ডেটা স্ক্রু করতে দেয়।" +1, দুর্দান্ত

2

যার মান পরিবর্তন হতে পারে এমন চাবি থাকা খারাপ অভ্যাস নয়।

একটি ভাল কী এর বৈশিষ্ট্য স্থায়িত্ব অন্তর্ভুক্ত। অপরিচ্ছন্নতা আদর্শ তবে পূর্বশর্ত নয়। অপরিবর্তনীয়তার জন্য একটি কৃত্রিম কী উপস্থাপন করা খারাপ অভ্যাস।

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

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


3
আইএসবিএন এর প্রস্থ স্থির করা থাকে, যখন এটি না হয় বাদে (আইএসবিএন -10 বনাম আইএসবিএন -13 দেখুন)।
একটি সিভিএন

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

1

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


1

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


0

কিছু মন্তব্য ইতিমধ্যে এটি বলেছে, একটি সমাধান হল একটি নতুন প্রাথমিক কী ব্যবহার করা

উদাহরণ (@onedaywhen যেমন নিম্নলিখিত), এর যাক বলতে যে টেবিল বিদ্যমান দিন বই যে বই একটি তালিকা সংরক্ষণ এবং আমরা "ব্যবহার" প্রাথমিক কী-এর মত আইএসবিএন নির্ধারণ। তবে কিছু লেখক ভুল আইএসবিএন টাইপ করার ভুল করেছিলেন তাই তারা আইএসবিএন পরিবর্তন করার জন্য বলেছিল, এতে পরবর্তী কাজগুলি জড়িত ছিল:

  • টেবিল বইগুলিতে একটি নতুন রেজিস্ট্রি তৈরি করুন
  • পুরানো আইএসবিএন থেকে নতুন আইএসবিএন-এর সমস্ত উল্লেখ নির্দেশ করুন। (*)
  • এবং শেষ পর্যন্ত, টেবিল বই থেকে পুরানো রেজিস্ট্রি মুছুন।

(*) এটি একটি বিদেশী কী ব্যবহার করে এমন একটি ডেটাবেজ মডেলের সমস্ত রেফারেন্সগুলি তুচ্ছ হতে পারে তবে কিছু মডেলের এটির অভাব রয়েছে।

Table Books
ISBN  is the primary key
NAME is a simple field.
etc.

আমরা এটি হিসাবে পরিবর্তন

Table Books
InternalBookId as the primary key
ISBN as a simple field or an indexed field.
NAME is a simple field.
etc.

যেখানে নতুন ইন্টার্নালবুকআইড এমনকি স্বায়ত্তশাসিত মান হতে পারে।

এটি সম্পর্কে কনস:

  • এটি একটি নতুন ক্ষেত্র যুক্ত করে যা আরও স্থান / সংস্থান ব্যবহার করে।

  • এটির জন্য পুরো মডেলটি আবার লিখতে হবে।

  • নতুন মডেলটির স্ব-ব্যাখ্যা কম হতে পারে।

প্রো

  • "প্রাথমিক কী" রূপান্তর করার অনুমতি দেয়।
  • এমনকি "প্রাথমিক কী" ফেলে বা রিফ্যাক্ট করার অনুমতি দেয়, উদাহরণস্বরূপ, পুরাতন কলামটি ফেলে দেওয়া এবং একটি নতুন তৈরি করার জন্য বইগুলি আইএসবিএন -13 এ পরিবর্তন করা এত সহজ create

নতুন টেবিল:

Table Books
InternalBookId as the primary key
ISBN13 is a new field.
NAME is a simple field.
etc.
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.