আপনি আপনার প্রাথমিক কীগুলি পছন্দ করেন? [বন্ধ]


89

আমার দলে মোটামুটি অ্যানিমেটেড আলোচনায় বেশিরভাগ মানুষ প্রাথমিক কী হিসাবে কী পছন্দ করে তা ভাবতে আমাকে তৈরি করা হয়েছিল। আমাদের নিম্নলিখিত গ্রুপগুলি ছিল-

  1. অন্তর্ / বিগআইন্ট যা স্বতঃআধিকরণ যথেষ্ট ভাল প্রাথমিক কী।
  2. কমপক্ষে 3 টি কলাম থাকা উচিত যা প্রাথমিক কী তৈরি করে।
  3. আইডি, জিইউইডি এবং মানব পঠনযোগ্য সারি শনাক্তকারীদের সকলকে আলাদাভাবে চিকিত্সা করা উচিত।

পিকেসের জন্য সর্বোত্তম পন্থা কোনটি? আপনি নিজের মতামতকে ন্যায়সঙ্গত করতে পারলে দুর্দান্ত লাগবে। উপরোক্ত যে আরও ভাল পদ্ধতির আছে?

সম্পাদনা: সারিগুলির জন্য মানব পঠনযোগ্য শনাক্তকারী তৈরি করতে কারও কাছে একটি সাধারণ নমুনা / অ্যালগরিদম রয়েছে যা ভাল করে স্কেল করে?


4
যেহেতু এটি বিষয়গত, তাই এটি সম্প্রদায়ের উইকি হওয়া উচিত
জন শিহান

4
"প্রাথমিক কী তৈরি করে কমপক্ষে 3 টি কলাম থাকতে হবে"? এটার মানে কি? আপনি আরও সংজ্ঞা দিতে পারেন? নাকি এই # 3 এর অংশ?
এস .লট

@ এস.লট PK(NEWID(),NEWID(),NEWID());-)

@ পিএসটি: এটি কেন প্রয়োজনীয়? কেন একজন পিকেটে তিনটি কলাম থাকতে হবে? কেন এক বা চার?
এস .লট

আমি তিনটি কলাম পিকে দেখতে পেলাম ... লোকালআইডি (অটো ইনক্রিমেন্ট ইন্ট), গ্লোবালআইডি (জিইউইডি), বিদেশী আইডি (রোলটাইপের মতো বিদেশী কী) ইত্যাদি etc. গাইডটি অন্য ওয়েবসাইট / পরিষেবার জন্য ব্যবহৃত হয়। ব্যক্তিগতভাবে আমি এটি করব না, আমি কেবল গাইড + ফোরইগেনআইডি ব্যবহার করব।
জেরাদ

উত্তর:


78

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

স্বতঃশক্তি ইন্টগুলি আপনার ডিফল্ট হওয়া উচিত এবং এগুলি ব্যবহার না করা ন্যায়সঙ্গত হওয়া উচিত।


4
একটি জিইউইডি প্রয়োজনীয় নয়, কেবলমাত্র পদক্ষেপটি 10 ​​বা 20 এ পরিবর্তন করুন তবে অনেকগুলি সার্ভারের আপনার ভবিষ্যতে সম্ভবত সিঙ্ক করতে হবে।
রবার্ট সি বার্থ

44
কমপক্ষে 90% সময়, একটি জিইউডি প্রয়োজন হয় না এবং স্থান নষ্ট করে।
জোনাথন লেফলার 3

8
আমি গুরুতরভাবে মনে করি জিইউডিগুলি একটি ওভারকিল। এখনও আমার প্রাথমিক কী হিসাবে কখনও জিইউইডি থাকার দরকার পড়েনি।
সিরিল গুপ্ত

7
অথবা, স্থান নষ্ট করার এবং জিইউডির সাথে সংঘর্ষের ঝুঁকির পরিবর্তে মূল প্রাথমিক কী এবং একটি ছোট সনাক্তকারীের একটি সংমিশ্রিত কী তৈরি করুন, যেখানে প্রতিটি সিঙ্ক উত্সের জন্য ছোট সনাক্তকারী আলাদা।
L̲̳o̲̳̳n̲̳̳g̲̳̳p̲̳o̲̳̳k̲̳̳e̲̳̳

4
আইএসও দেশ বা ভাষার কোডের মতো সর্বজনীন পরিচয়কাগুলি উপলভ্য থাকা সত্ত্বেও যে দোকানটি আমি সমস্ত কিছুর জন্য জিইউইডি ব্যবহার করি for এবং এমনকি যখন একটি বুলিয়ান বা CHAR(1)যথেষ্ট ছিল, যেমন sex। বলা বাহুল্য, এটির সাথে কাজ করা দুঃস্বপ্ন ছিল।
লুমি

56

আমি কোন উত্তর দেখতে পাচ্ছি না যা প্রকৃত মৌলিক বিষয়টি উল্লেখ করেছে (যাকে আমি বিবেচনা করি) - যথা, একটি প্রাথমিক কীটি এমন গ্যারান্টি দেয় যে আপনি একই বাস্তব-বিশ্ব সত্তার জন্য টেবিলে দুটি প্রবেশিকা পাবেন না (যেমন ডাটাবেসে মডেল করা)। এই পর্যবেক্ষণটি প্রাথমিক কীগুলির জন্য কী ভাল এবং কোনটি খারাপ পছন্দ তা প্রতিষ্ঠিত করতে সহায়তা করে।

উদাহরণস্বরূপ, (মার্কিন) রাষ্ট্রের নাম এবং কোডগুলির একটি সারণীতে নাম বা কোডটি প্রাথমিক কী হতে পারে - তারা দুটি পৃথক প্রার্থী কী গঠন করে এবং এর মধ্যে একটি (সাধারণত সংক্ষিপ্ত - কোড) হিসাবে নির্বাচিত হয় প্রাথমিক কী ক্রিয়ামূলক নির্ভরশীলতার তত্ত্বে (এবং নির্ভরতাগুলিতে যোগ দিন - 5NF এর মাধ্যমে 1NF - এটি প্রার্থী কী যা প্রাথমিক কী-এর চেয়ে গুরুত্বপূর্ণ) are

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

একটি আদর্শ প্রাথমিক কী সংক্ষিপ্ত, অনন্য, স্মরণীয় এবং প্রাকৃতিক। এই বৈশিষ্ট্যগুলির মধ্যে, স্বতন্ত্রতা বাধ্যতামূলক; বাকিগুলিকে বাস্তব বিশ্বের ডেটাগুলির সীমাবদ্ধতাগুলি দেওয়া উচিত।

যখন কোনও প্রদত্ত টেবিলের প্রাথমিক কী নির্ধারণ করার কথা আসে, তখন আপনাকে সেই টেবিলটি কী উপস্থাপন করে তা দেখতে হবে। টেবিলের কলাম মানগুলির সেট বা সেটগুলি টেবিলের প্রতিটি সারি স্বতন্ত্রভাবে চিহ্নিত করে? তারা প্রার্থী চাবি হয়। এখন, যদি প্রতিটি প্রার্থী কীতে 4 বা 5 টি কলাম থাকে, তবে আপনি সিদ্ধান্ত নিতে পারেন যে এগুলি খুব ভাল একটি প্রাথমিক প্রাথমিক কী (মূলত স্বল্পতার কারণেই) তৈরি করতে খুব অসতর্ক। এই পরিস্থিতিতে, আপনি একটি surrogate কী পরিচয় করিয়ে দিতে পারেন - একটি কৃত্রিমভাবে উত্পন্ন সংখ্যা। খুব প্রায়ই (তবে সর্বদা নয়) সরোগেট কীটির জন্য একটি সাধারণ 32-বিট পূর্ণসংখ্যা যথেষ্ট। তারপরে আপনি এই সরোগেট কীটিকে প্রাথমিক কী হিসাবে মনোনীত করুন।

তবে, আপনাকে অবশ্যই নিশ্চিত করতে হবে যে অন্যান্য প্রার্থী কীগুলি (সারোগেট কী জন্য প্রার্থী কীও, পাশাপাশি নির্বাচিত প্রাথমিক কী) সমস্তগুলি অনন্য সনাক্তকারী হিসাবে রক্ষণাবেক্ষণ করা হয় - সাধারণত কলামগুলির সেই সেটগুলিতে একটি অনন্য বাধা রেখে।

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

এটি কিছুটা দিক থেকে বেশ হার্ড-লাইনের দর্শন।

জিইউইডি ব্যবহারের প্রয়োজন হলে আমার কোনও বিশেষ সমস্যা নেই, তবে এগুলি বড় হতে থাকে (১ 16-6464 বাইটের মতো), এবং সেগুলি প্রায়শই ব্যবহার করা হয়। খুব প্রায়শই একটি পুরোপুরি ভাল 4-বাইট মান যথেষ্ট হবে। একটি জিইউইডি ব্যবহার করে যেখানে একটি 4-বাইটের মান ডিস্কের জায়গার অপচয় করে, এবং সূচী পৃষ্ঠায় প্রতি মান কম থাকায় ডেটাতে সূচক অ্যাক্সেসকে ধীর করে দেয়, তাই সূচকটি আরও গভীরতর হবে এবং আরও পৃষ্ঠাগুলি পড়তে হবে তথ্য।


10
মার্কিন যুক্তরাষ্ট্রের রাজ্যের নামগুলির সাথে আপনার নমুনা সম্পর্কে আমি পৃথক সারোগেট কীটি পছন্দ করব, কেবল কারণ কোডগুলি আপনার নিয়ন্ত্রণের বাইরে। যদি কোনও সমস্যা হয় তবে যে কোনও কারণে তাদের যদি পরিবর্তন হয়।
ডার্ক ভোলমার

4
(অব্যাহত) উদাহরণস্বরূপ, জার্মানি পুনরায় একীকরণের পরে 1990-এর দশকে 5-অঙ্কের সিস্টেমের সাথে 4-সংখ্যার জিপ কোড সিস্টেমকে প্রতিস্থাপন করেছিল।
ডার্ক ভোলমার

@ ডিভো: আমি কৃত্রিম / সারোগেট কীগুলির একটি শক্তিশালী উকিল, তবে আমি 4-সংখ্যার 5-সংখ্যার ডাক কোড পরিবর্তনও একটি ভাল উদাহরণ হিসাবে দেখছি না। ডাক কোডগুলি কোনও কিসের কী হিসাবে সাধারণত ব্যবহৃত হয় না। (কোডটি সম্পর্কে কিছু জানার জন্য আপনাকে শেষবারের মতো পোস্টকোড টেবিলটি কখন জিজ্ঞাসা করতে হয়েছিল? না, এটি অন্য কোনও সারণীতে উল্লেখ না করে কোনও ঠিকানা হিসাবে প্রায় একচেটিয়াভাবে ব্যবহৃত হয়েছে I আমি বলব যে আপনার পরামর্শটি ব্যবহারের সাথে প্রায় সমান নিজের ঠিকানাগুলির জন্য সারোগেট কীগুলি))
এরিক

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

4
আপনার প্রথম পয়েন্টটি সঠিক। এই সীমাবদ্ধতার জন্য একটি নাম আছে। একে "সত্তা অখণ্ডতা" বলা হয়। EI প্রতিটি সত্তার একটি অনন্য পরিচয় থাকা আবশ্যক। প্রাথমিক কীগুলি প্রায়শই এই প্রয়োজনীয়তাটি মেটায়, স্বতঃবার ব্যবহার করা বাদে। স্বায়ত্তশাসনের সাথে, আপনি স্বতঃশব্দ বাদে দুটি সারি অভিন্ন দেখতে পাবেন। এটি সাধারণত সত্তার অখণ্ডতা লঙ্ঘন করে।
ওয়াল্টার মিট্টি

26

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

  • টেবিলের কোনও অন্য বৈশিষ্ট্য বা বৈশিষ্ট্যের সেটটি স্বতন্ত্রভাবে সারিগুলি সনাক্ত করতে উপযুক্ত না হলে সারোগেট কীগুলি কার্যকর হয়।
  • টেবিলটিকে আরও মানব-পঠনযোগ্য করে তোলার জন্য প্রাকৃতিক কীগুলিকে অগ্রাধিকার দেওয়া হয় when প্রাকৃতিক কীগুলি কোনও নির্ভরযোগ্য টেবিলের বিদেশী কীটিকে একটি সারোগেট আইডির পরিবর্তে একটি আসল মান রাখতে দেয়। উদাহরণস্বরূপ যখন আপনার state(সিএ, টিএক্স, এনওয়াই) সংরক্ষণ করতে হবে তখন আপনি char(2)কোনও প্রাকের পরিবর্তে একটি প্রাকৃতিক কী ব্যবহার করতে পারেন ।
  • উপযুক্ত যেখানে যৌগিক প্রাথমিক কী ব্যবহার করুন। idপুরোপুরি ভাল যৌগিক কী উপস্থিত থাকলে অহেতুক একটি সারোগেট কী যুক্ত করবেন না (এটি বিশেষত বহু থেকে বহু সারণীতে সত্য)। প্রতিটি টেবিলের তিন-কলামের কীর জন্য আদেশ হ'ল পরম মজাদার।
  • যখন একাধিক সাইটে আপনার স্বতন্ত্রতা সংরক্ষণ করার দরকার হয় তখন জিইউইডিগুলি হ'ল একটি সমাধান। আপনার যদি অনন্য হতে প্রাথমিক কীতে মানগুলির প্রয়োজন হয় তবে সেগুলি অর্ডার করা বা ক্রমাগত নয় They
  • আইএনটি বনাম বিগিন্ট: এটি সাধারণ নয় যে কোনও টেবিলে প্রাথমিক কীগুলির জন্য একটি -৪ -বিট পরিসর দরকার , তবে 64৪ -বিট হার্ডওয়্যারের ক্রমবর্ধমান প্রাপ্যতার সাথে এটি বোঝা হওয়া উচিত নয় এবং আরও বেশি নিশ্চয়তা দেয় যে আপনি উপচে পড়বেন না। আইএনটি অবশ্যই ছোট, সুতরাং স্থান যদি একটি প্রিমিয়ামে থাকে তবে এটি সামান্য সুবিধা দিতে পারে।

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

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

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

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

20

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

একটি প্রাথমিক কী জন্য 3 কলাম? আমি বলব যে ব্যবসার বিধিগুলির চাহিদা অনুসারে কলামগুলিতে যথাযথ অনন্য বাধা থাকা উচিত, তবে আমার এখনও একটি পৃথক সারোগেট কী থাকবে। যৌগিক কী মানে ব্যবসায়িক যুক্তি কীতে প্রবেশ করে। যদি যুক্তি পরিবর্তন হয় তবে আপনার সম্পূর্ণ স্কিমা স্ক্রুযুক্ত।


4
তারা তাদের লিঙ্কটি পরিবর্তন করেছে, এখানে আপডেট বুকমার্কটি রয়েছে: ডাটাবেস
প্রোগ্রামার.ব্লগস্পট.com/2008/09/…

সবেমাত্র এর মতো একটি প্রকল্প উত্তরাধিকার সূত্রে প্রাপ্ত। এবং প্রথম কাজটি তারা করতে চেয়েছিল স্কিমাটি ফুরিয়েছে। সারোগেট কীগুলি এফটিডাব্লু। আপনার ডিবি এফটিএল-এ ব্যবসায়িক যুক্তি।
জেসন


11

কিছুটা সামান্য বিষয়বস্তুতে, তবে আমি এতে চিমাইতে বাধ্য হই ...

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


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

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

@ র‌্যাল্ফ, আপনি ঠিক বলেছেন, প্রত্যেকটি sertোকানো নয়, তবে একটি 20x পারফরম্যান্স হিট করার পক্ষে যথেষ্ট। sql-server-performance.com/articles/per/…
Portman

এসকিউএল সার্ভার ফাংশন নিউ সিক্যুয়েন্সিড () জিইউইডিগুলির সাথে সূচক টুকরা সমস্যা সমাধান করে (যদিও 24 বাইট এখনও অতিরিক্ত মাত্রায় অতিরিক্ত থাকে যদি আপনার বৈশ্বিক স্বতন্ত্রতার প্রয়োজন না হয়)। এমএসডিএন.মাইক্রোসফটকম /en-us/library/ms189786.aspx দেখুন।
এরিক

10

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

এখন, সারোগেট কীটি নির্বাচনের জন্য, আমি পরিচয় কলামগুলি দিয়েছি (আমি বেশিরভাগ এমএস এসকিউএল সার্ভারে কাজ করি)। জিইউইডিগুলি খুব বড় এবং মাইক্রোসফ্ট এগুলিকে পিকে হিসাবে ব্যবহারের বিরুদ্ধে সুপারিশ করে। আপনার যদি একাধিক সার্ভার থাকে তবে আপনাকে যা করতে হবে তা হ'ল ইনক্রিমেন্ট 10 বা 20 বা যা যা আপনি মনে করেন সর্বাধিক সংখ্যক সার্ভারের সংখ্যায় সিঙ্ক / প্রসারিত করতে হবে এবং প্রতিটি পরবর্তী সার্ভারে প্রতিটি টেবিলের জন্য বীজ ইনক করুন inc , এবং আপনার কাছে কখনও ডেটা সংঘর্ষ হবে না।

অবশ্যই, ইনক্রিমেন্টের কারণে আমি পরিচয় কলামটি একটি বিগইন্ট (অন্যথায় দীর্ঘ [64 বিট] হিসাবে পরিচিত) করি make

কিছুটা গণিত করছেন, এমনকি যদি আপনি ইনক্রিমেন্ট 100 করেন তবে আপনার টেবিলটিতে এখনও 92,233,720,368,547,758 (> 92 কোয়াড্রিলিয়ন) সারি থাকতে পারে।


9

আমি মনে করি "প্রাথমিক" কী শব্দটি "প্রাথমিক" শব্দটির ব্যবহার সত্যিকার অর্থে বিভ্রান্তিকর।

প্রথমে সংজ্ঞাটি ব্যবহার করুন যে "কী" একটি বৈশিষ্ট্য বা বৈশিষ্ট্যের সেট যা টেবিলে অনন্য হতে হবে,

তারপরে, কোনও কী থাকা বেশিরভাগ ক্ষেত্রে পারস্পরিক অসঙ্গতিপূর্ণ উদ্দেশ্যে কাজ করে।

  1. চাইল্ড টেবিলগুলির এক বা একাধিক রেকর্ডের শর্তে যোগ দেয় হিসাবে এই পিতামাতার সাথে একটি সম্পর্ক রয়েছে। (এই শিশু ছকগুলিতে একটি বিদেশী কী স্পষ্টভাবে বা স্পষ্টভাবে সংজ্ঞায়িত করা)
  2. (সম্পর্কিত) শিশুর রেকর্ডগুলির প্যারেন্ট ট্যাবটিতে অবশ্যই পিতা-মাতার রেকর্ড থাকতে হবে; ই (চাইল্ড টেবিল এফকে অবশ্যই প্যারেন্ট টেবিলে কী হিসাবে উপস্থিত থাকতে হবে)
  3. টেবিলের সুনির্দিষ্ট রেকর্ড / সারিটি দ্রুত সনাক্ত করা দরকার এমন প্রশ্নের উত্কর্ষতা বাড়াতে।

  4. একই লজিক্যাল সত্তাকে টেবিলের মধ্যে beingোকানো থেকে প্রতিলিপি সারিগুলি প্রতিরোধ করে ডেটা ধারাবাহিকতা নিশ্চিত করতে। (এটিকে প্রায়শই "প্রাকৃতিক" কী বলা হয় এবং এতে সারণী (সত্তা) বৈশিষ্ট্যগুলি হওয়া উচিত যা তুলনামূলকভাবে অদম্য are)

স্পষ্টতই, কোনও অ-অর্থপূর্ণ, অ-প্রাকৃতিক কী (কোনও জিইউইডি বা স্বতঃ-উত্পন্ন পূর্ণসংখ্যার মতো # 4 সন্তুষ্ট করতে সম্পূর্ণ অক্ষম।

তবে প্রায়শই, অনেকগুলি (সর্বাধিক) সারণীগুলির সাথে, একটি সম্পূর্ণ প্রাকৃতিক কী যা # 4 সরবরাহ করতে পারে তা প্রায়শই একাধিক বৈশিষ্ট্য ধারণ করে এবং অত্যধিক প্রশস্ত হয় বা এত প্রশস্ত হয় যে এটি # 1, # 2 বা # 3 উদ্দেশ্যে ব্যবহার করা অগ্রহণযোগ্য হতে পারে কর্মক্ষমতা ফলাফল।

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

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


এসকিউএল সার্ভার ফাংশন নিউ সিক্যুয়েন্সিড () জিইউইডিগুলির সূচী বিভাজন সমস্যা সমাধান করে (যদিও 24 টি বাইট এখনও অতিরিক্ত মাত্রায় অতিরিক্ত থাকে যদি আপনার বৈশ্বিক স্বতন্ত্রতার প্রয়োজন না হয়)। এমএসডিএন.মাইক্রোসফটকম /en-us/library/ms189786.aspx দেখুন।
এরিক

উফ, আমি বলতে চাই 16 বাইট।
এরিক

8

একটি জিনিস যা আপনার কখনও করা উচিত নয় তা হ'ল স্মার্ট কী ব্যবহার করা। এটি এমন একটি চাবি যেখানে রেকর্ড সম্পর্কিত তথ্য নিজেই কোডে কোড করা হয় এবং এটি আপনাকে শেষ পর্যন্ত কাটাবে।

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

অন্য একটি জায়গা, রেকর্ডের জন্য প্রাথমিক কী হিসাবে গাছের অবস্থানটি ব্যবহার করেছে। সুতরাং নিম্নলিখিত মত রেকর্ড হবে।

Cat1.subcatA.record1
Cat1.subcatA.record2
Cat1.subcatB.record1
Cat2.subcatA.record1

অবশ্যই, গ্রাহকরা প্রথম যে জিনিসটি চেয়েছিলেন তা ছিল গাছের চারপাশে আইটেমগুলি সরানোর এক উপায়। সফ্টওয়্যারের পুরো সেটটি ঘটে যাওয়ার আগেই মারা গেল।

দয়া করে, দয়া করে, দয়া করে, আপনি যদি আমার কোডটি বজায় রাখতে হয় এমন কোডটি লিখে থাকেন তবে দয়া করে একটি স্মার্ট কী ব্যবহার করবেন না!


আমি আন্তরিকভাবে একমত। স্মার্টকিজ = বোবা।
রবার্ট সি বার্থ

4
এর অর্থ এই নয় যে প্রাকৃতিক কীগুলি যদিও বোবা। তবে ভাল কথা।

4

আমি প্রাথমিক কী হিসাবে স্বতঃবৃদ্ধির একজন ভক্ত। আমি আমার হৃদয়ে গভীরভাবে জানি যে এটি একটি কপ-আউট, তবে এটি যুক্ত হওয়ার সাথে সাথে ডেটাটি সাজানো এত সহজ করে তোলে (আইডি ডিএসসি দ্বারা অর্ডার, f'r উদাহরণ)।

3 টি কলামগুলি মানবিকভাবে পার্স করার জন্য ভয়ঙ্করভাবে কঠোর মনে হচ্ছে।

এবং এটি বাণিজ্য-বন্ধ, আপনার কতটা সম্পর্কের সামর্থ্য প্রয়োজন, বনাম এই সারণীটি সঠিকভাবে এখানে জিজ্ঞাসাবাদকারীকে বোধগম্য করে তোলে (সঞ্চিত পদ্ধতি বা প্রোগ্রামেটিক ইন্টারফেস বনাম)।

অটো-ইনক্রিমেন্টটি আমাদের মানুষের জন্য। :-(


4

সাধারণত, এটি নির্ভর করে।

ব্যক্তিগতভাবে, আমি স্বতঃসংশোধক ইনট পছন্দ করি।

তবে, একটি জিনিস যা আমি আপনাকে বলতে পারি তা হ'ল কখনও কখনও আপনার উত্স হিসাবে অন্য উত্স থেকে প্রাপ্ত ডেটা বিশ্বাস না করে। আমি কসম খেয়েছি, যতবার আমি এটি করেছি তা আমাকে কামড়ানোর জন্য ফিরে আসে। ঠিক আছে, আর কখনও না!


3

কমপক্ষে 3 টি কলাম থাকা উচিত যা প্রাথমিক কী তৈরি করে।

আমি এটা বুঝতে পারি না।

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

অন্তর্ / বিগআইন্ট যা স্বতঃআধিকরণ যথেষ্ট ভাল প্রাথমিক কী।

আমি গাইড পছন্দ করি। স্বতঃসংশোধনের একটি সম্ভাব্য সমস্যা হ'ল মান (যেমন "অর্ডার আইডি") ডাটাবেস উদাহরণ দ্বারা নির্ধারিত হয় (উদাহরণস্বরূপ "বিক্রয় ডেটাবেস") ... যা সম্পূর্ণরূপে কাজ করবে না (পরিবর্তে আপনাকে যৌগিক কীগুলির প্রয়োজন হবে) যদি আপনার কখনও কখনও একাধিক ডাটাবেস উদাহরণ দ্বারা তৈরি ডেটা মার্জ করা প্রয়োজন (যেমন তাদের নিজস্ব ডাটাবেসের সাথে বেশ কয়েকটি বিক্রয় অফিস থেকে) from


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

3

আর জিইউডির

এটি সত্যিই সত্যিই সত্যিই বড় ডেটাবেস, প্রচুর পরিমাণে লোড এবং দ্রুত অ্যাক্সেস হতে চলেছে কিনা দেখুন ।

আমার শেষ কাজটিতে, যেখানে আমাদের ১০০ থেকে ৫০০ মিলিয়ন রেকর্ডের ডাটাবেস ছিল, সেখানে আমাদের ডাটাবেস ছেলেরা জিইউডিগুলির বিরুদ্ধে দৃ an়ভাবে তর্ক করেছিল এবং একটি উপযুক্ত আকারের দশমিক সংখ্যার জন্য। তারা অনুভব করেছিল যে (ওরাকলের অধীনে) একটি স্ট্রিং গাইডের জন্য অভ্যন্তরীণ স্টোরেজটির আকারের পার্থক্য - বনাম - দশমিক মান লুপআপে খুব লক্ষণীয় পার্থক্য আনবে। (বড় কীগুলি = আরও গভীর গাছগুলি পেরোনোর ​​জন্য)

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


"ফিল-ফ্যাক্টর হ্রাস করে"? ফিল-ফ্যাক্টর এর অর্থ কী হতে পারে তা নিশ্চিত নয় যে এটি একটি শট চুক্তি, সূচকটি তৈরি হওয়ার সময় সূচকের পাতার-স্তরে অনুরোধ করা মুক্ত স্থানের শতাংশ হিসাবে সংজ্ঞায়িত। ফিল্ড-ফ্যাক্টর সরবরাহ করে এমন ফ্রি-স্পেসে প্রবেশের জন্য পাতার স্তরের প্রশস্ততা জুড়ে তাদের এলোমেলো প্রকৃতি বিতরণ করে জিআইডি মান values
রাল্ফ শিলিংটন

4
কখন থেকে জিআইডি একটি স্ট্রিং হয়? জিইউইডিগুলি কোনও শ্রদ্ধেয় ডিবিএমএসের দ্বারা 16 বাইট হিসাবে অভ্যন্তরীণভাবে সংরক্ষণ করা উচিত। হেক্স উপস্থাপনায় 32 বাইট হিসাবে স্টোর করা দায়বদ্ধ নয়! (অথবা 36
ড্যাশযুক্ত

2

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


2

আমি সর্বদা একটি সারোগেট কী ব্যবহার করেছি - 'আইডি' নামে একটি স্বতঃসংশোধক পূর্ণসংখ্যা। অন্য বিকল্পটি সুস্পষ্ট হওয়া সত্ত্বেও আমি এটি করার প্রচুর কারণ দেখতে পাচ্ছি:

  • ধারাবাহিকতা
  • ডেটা স্বতন্ত্র (অনন্য, বিন্যাসে পরিবর্তন দ্বারা ধ্বংস হয় না)
  • মানব পাঠযোগ্য

... এবং না করার কোনও বুদ্ধিমান কারণ:

  • সংমিশ্রণে যোগ দেয়? - আইএমএইচও, টেবিলগুলি আলিয়াস করা একটি ভাল অনুশীলন
  • সর্বোত্তম টেবিল? - প্রতি প্রবেশে একটি বাইট অপসারণ হ'ল অকাল অপ্টিমাইজেশন, আইএমএইচও
  • প্রতি টেবিলের সিদ্ধান্ত? - আর ধারাবাহিক না
  • স্কেলিং সমস্যা? - এহ? কেন?
  • শ্রেণিবদ্ধ তথ্য কাঠামো? - এটি ধর্মীয় বিষয়, পুরোপুরি ধর্মীয় বিষয় den থিওরিতে আমি কয়েকটি পরিস্থিতিতে একজন অনুরাগী, তবে বাস্তবে কখনও তা বলার অপেক্ষা রাখে না :)

এর বিরুদ্ধে বুদ্ধিমান কারণগুলি যা আমি ভেবে দেখিনি বা এখনও আসতে পারিনি সর্বদা স্বাগত জানাই ...


1

এটি একটি ক্লাসিক "এটি নির্ভর করে"। প্রতিটি প্রকল্পের জন্য সঠিক উত্তর নেই। আমি বিভিন্ন পরিস্থিতিতে বিভিন্ন জিনিস পছন্দ করি। এটি আমি একটি ORM ব্যবহার করছি কিনা এবং এটি কী সমর্থন করে তার উপর নির্ভর করে। এটি সামগ্রিক আর্কিটেকচারের উপর নির্ভর করে (বিতরণ করা হয় না, ইত্যাদি)। আপনি যে কাজ করবেন বলে মনে করেন কেবল তা চয়ন করুন এবং ট্যাব এবং স্পেসগুলি নিয়ে তর্ক করার দিকে এগিয়ে যান।


তিনি এখনও এটি নির্ভর করে কীভাবে এটি জানতে চান; কেবল এগুলির সচেতনতার সাথেই কেউ নিজের পছন্দ করার জন্য নিজের বিশ্বাস করতে পারে ...
নিকোলাস লিওনার্ড

1

আমি আকার 1, সংযোগকারী সংখ্যার উপর নির্ভর করে # 1 বা # 3 বিকল্পটি ব্যবহার করি এবং এটি একাধিক ডাটাবেস সার্ভারের পরিস্থিতি কিনা।

বিকল্প # 2 আমার কাছে খুব একটা বোঝায় না। যদি তিনটির কোনও একটিই একটি অনন্য রেকর্ড সনাক্ত করার জন্য পর্যাপ্ত না হয় তবে এটি সম্ভব (অতিরিক্ত যান্ত্রিক প্রক্রিয়া ছাড়াই) দুটিরই তিনটি কলামে একই মান সহ দুটি রেকর্ড রয়েছে। যদি আপনি তিনটির কোনও সমন্বয় করে স্বতন্ত্রতা প্রয়োগ করতে চান তবে তাদের জন্য কেবল একটি সূচক যুক্ত করুন।


1

আমি কেবল একটি অটো-ইনক্রিমেন্ট ইন্ট বা একটি জিইউডি ব্যবহার করেছি। 99% সময় আমি অটো-ইনক্রিমেন্ট ইনট ব্যবহার করেছি। আমি যখন ডেটাবেসগুলি সম্পর্কে প্রথম জানতে পারি এবং কখনই সেগুলি ব্যবহার না করার কোনও কারণ দেখিনি (যদিও আমি জানি যে একটি জিআইডি আরও ভাল হবে তার কারণগুলি সম্পর্কে) আমি কেবল এটিই ব্যবহার করতে শিখিয়েছিলাম।

আমি অটো ইনক্রিমেন্ট ইনট পছন্দ করি কারণ এটি পাঠযোগ্যতার সাথে সহায়তা করে। উদাহরণস্বরূপ আমি বলতে পারি "রেকর্ড 129383 দেখুন" এবং কারও পক্ষে এটি খুঁজে পাওয়া খুব সহজ। এমন জিআইডি সহ যা করা প্রায় অসম্ভব।


4
তুমি কেন এটা বললে? দেখে মনে হচ্ছে অনেক লোক একটি অটো-ইনক্রিমেন্ট পূর্ণসংখ্যা ব্যবহার করে। এটি আপনার প্রয়োজনের জন্য যদি কাজ করে এবং ভালভাবে কাজ করে তবে এটি খারাপ হতে পারে না।
21

1

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

  • প্রাথমিক কী সংজ্ঞা অত্যধিক জটিল নয়? এটি "সেরা-অনুশীলন" অনুসরণ করার জন্য অপ্রয়োজনীয় জটিলতা এড়ানো কি এড়াতে পারে?
  • ডাটাবেসগুলি হ্যান্ডেল করার জন্য (যেমন INTEGER বনাম VARCHAR, ইত্যাদি) এর জন্য কম ওভারহেডের প্রয়োজন হবে এমন আরও ভাল প্রাথমিক কী কী আছে?
  • আমি কি একেবারে নিশ্চিত যে আমার প্রাথমিক কীটির স্বতন্ত্রতা এবং সংজ্ঞায়িত নেস আক্রমণকারী পরিবর্তন হবে না?

সম্ভবত এটিই সম্ভবত জিআইইউ বা স্ব-বর্ধক পূর্ণসংখ্যা কলামগুলির মতো জিনিসগুলি ব্যবহার করার জন্য বেশিরভাগ লোককে আকর্ষণ করে, কারণ ঠিকানা, ফোন নম্বর, প্রথম / শেষ নাম ইত্যাদির মতো বিষয়ের উপর নির্ভর করে কেবল এটিকে কাটবেন না। আমি ভাবতে পারি এমন ব্যক্তিদের সম্পর্কে একমাত্র আক্রমণকারী হ'ল এসএসএন, তবে আমি চিরকাল অনন্য হয়ে থাকা ব্যক্তিদের সম্পর্কে 100% নির্দিষ্টও নই।

আশা করি এটি কিছু স্পষ্টতা যুক্ত করতে সহায়তা করবে ...


কিছু historicalতিহাসিক মামলা রয়েছে যেখানে এসএসএন এর অনন্য নয়।
বিল কারভিন 21

1

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


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

4
আমি সবসময় ভাবতাম বিশেষজ্ঞরা কাজের জন্য সর্বোত্তম সরঞ্জামটি ব্যবহার করেছেন
অ্যান্ড্রু জি জনসন

1

প্রায় সর্বদা পূর্ণসংখ্যার।

প্রক্রিয়াটি আরও ছোট / দ্রুত হওয়া ছাড়াও তাদের অন্যান্য ভাল কারণ রয়েছে। আপনি বরং কী লিখবেন - "404040" বা "3463b5a2-a02b-4fd4-aa0f-1d3c0450026c"?


দ্বিতীয়টি ড্যাশ যুক্ত এবং বেস ১ 16-এর সাথে একটি পূর্ণসংখ্যা হতে পারে But তবে হ্যাঁ, দীর্ঘ জিইউডি থেকে 404040 প্রক্রিয়াটি দ্রুততর হয়। তারপরে আবার 0 টি প্রক্রিয়াকরণে আরও দ্রুত হয় কারণ এর জন্য একক বিট ডেটার প্রয়োজন হয় না!
স্ট্র্যাজার

1

কেবল সামান্য প্রাসঙ্গিক, তবে একটি কাজ আমি সম্প্রতি করা শুরু করেছি যখন আমার ছোট শ্রেণিবদ্ধকরণ সারণী রয়েছে (মূলত কোডগুলিতে ENUM গুলি উপস্থাপন করবে) আমি প্রাথমিক কীটিকে একটি চর (3) বা চর (4) করব। তারপরে আমি সেই প্রাথমিক কীগুলিকে অনুসন্ধান মানটির প্রতিনিধি বানাই।

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

এটি সত্যিই দুর্দান্ত কারণ এটি কোনও int এর চেয়ে বেশি জায়গা ব্যবহার করে না, এবং আপনি যখন সোর্স ডেটাটি দেখছেন, তখন হ্যাকের মানটি কী তা জানতে আপনাকে অনুসন্ধানের টেবিলটি লিঙ্ক করতে হবে না। উদাহরণস্বরূপ, একটি উদ্ধৃতি সারিটি দেখতে পারে:

1 পার্টনাম্বার $ 40 এমটিএল
2 অন্যান্য পার্টনাম্বার $ 29.99 এসভিসি
3 পার্টনম্বার 2 $ 150 টিআরভি

এটি আরও সহজ যে বিভাগগুলির প্রতিনিধিত্ব করার জন্য কোনও ইন্ট ব্যবহার করে এবং তারপরে সমস্ত লাইনে 1, 2, 3 লিঙ্ক করা - আপনার ঠিক সেখানে উপস্থিত তথ্য রয়েছে এবং কার্য সম্পাদন মোটেই প্রভাবিত বলে মনে হচ্ছে না (আমি তা নয়) সত্যই পরীক্ষা করা হয়েছে।)

আসল প্রশ্নটি যতটা যায় ... আমি রাউজিইউইডি-র অনন্য পরিচয়বিদদের পছন্দ করি। আমি এটিতে 100% নই, তবে সমস্ত সারিতে কোনওভাবেই অভ্যন্তরীণ রউগুইড নেই? যদি তা হয় তবে রো গুইড ব্যবহার করতে আসলে অন্তরগুলির চেয়ে কম জায়গা লাগবে (বা matter বিষয়টির জন্য অন্য কিছু know) আমি কেবল জানি যে গ্রেটপ্লেইনসে এম for ব্যবহার করার পক্ষে এটি যথেষ্ট ভাল তবে এটি আমার পক্ষে যথেষ্ট ভাল। (আমি কি হাঁস করব ??)


1

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


4
হ্যাঁ আপনি পারবেন, আপনি কেবলমাত্র সাব টাইপ টেবিলগুলির পরিচয় সম্পত্তি রাখবেন না, পরিবর্তে তারা সুপার টাইপের সারণী মানের স্পষ্টভাবে সন্নিবেশ পান। দয়া করে দেখুন stackoverflow.com/questions/2112882/...
ErikE

1

আমি প্রাকৃতিক কীগুলি পছন্দ করি, যখনই আমি তাদের উপর বিশ্বাস রাখতে পারি। বিষয় বিশেষজ্ঞদের বোধগম্য কীগুলি ব্যবহার করার জন্য আমি একটি ছোট পারফরম্যান্সের মূল্য দিতে ইচ্ছুক।

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

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

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


কিছু নমুনা বিশ্বাসযোগ্য প্রাকৃতিক কী বর্ণনা করুন?
এরিক

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

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

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

1

গাইড.পরিয়ড।

আপনার স্কেল তৈরি করতে হবে বা বিকল্প কীভাবে আপনাকে প্রাথমিক কী অর্পণ করতে হবে সে ক্ষেত্রে তারা আপনার বন্ধু হবে। আপনি অন্য কিছুর জন্য সূচি যোগ করতে পারেন।


আমার বিবৃতি স্পষ্ট করতে আপডেট করুন।

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

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

অন্যদিকে, একটি স্বয়ংক্রিয় বর্ধিত আইএনটি কেবল প্রাথমিক ডাটাবেসের মধ্যে নিরাপদে উত্পন্ন হতে পারে। আবার, এই পারে ঠিক আছে, আপনি যে গলাগলি যে এক ব্যাকিং ডিবি সার্ভার সঙ্গে সংযুক্ত করা হবে এবং আউট স্কেলিং কিছু আপনার সাথে উদ্বিগ্ন নয় একটি অ্যাপ্লিকেশন আছে সেই বিষয়ে নিশ্চিত।

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

আপনি যদি বড় আকারের অ্যাপ্লিকেশনগুলি একবার দেখে থাকেন তবে আপনি গুরুত্বপূর্ণ কিছু লক্ষ্য করবেন: তারা সকলে কী হিসাবে বেস 64 এনকোডেড জিআইডি ব্যবহার করে। এই জন্য কারণ সহজ, GUIDs ব্যবহার আপনি আকার পরিবর্তন করতে সক্ষম আউট সহজে যেহেতু সেখানে যখন ints স্কেল প্রয়াস মাধ্যমে ঝাঁপ হুপ্স অনেকটা হতে পারে।

আমাদের সর্বশেষ অ্যাপ্লিকেশনটি প্রায় এক মাস অবধি স্থায়ী ভারী সন্নিবেশগুলির মধ্য দিয়ে যায়। এরপরে 90 +% প্রশ্নের সবগুলি প্রতিবেদনের জন্য নির্বাচিত। ক্ষমতা বাড়াতে আমি এই বড় sertোকানোর সময়কালে অতিরিক্ত ডিবি সার্ভার আনতে পারি; এবং পরে এগুলি সহজেই প্রতিবেদনের জন্য একক ডিবিতে মার্জ করে। আইএনটিগুলির সাথে এটি করার চেষ্টা করা একটি নিখুঁত দুঃস্বপ্ন।

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


আপনি কি কখনও আপনার সূচীর ফিল ফ্যাক্টর পরীক্ষা করেছেন? জিইউইডি'র এঁদের সুইস পনির এলোমেলো প্রকৃতি - নাটকীয়ভাবে তাদের কার্যকারিতা হ্রাস করে।
স্টেফবু

4
"গাইডস.পিরিয়ড": এটি এত ভুল। জিইউইডিগুলি যথাযথ যেখানে ব্যবহার করা উচিত। অন্য মন্তব্যকারী যেমন উল্লেখ করেছেন, এটি প্রোগ্রামার হিসাবে জীবনকে সহজ করে তুলতে পারে, তবে ডিবির সামগ্রিক আকার এবং কার্যকারিতাকে প্রভাবিত করে।
মিচ গম

দিনের শেষে, আমি ইস্যু ছাড়াই একাধিক ডাটাবেস সার্ভারগুলিতে আমার অ্যাপ্লিকেশনগুলি স্কেল করতে পারি। তবে আমার ধারণা আপনি ছেলেরা ছোট ছোট সাইটে কাজ করেন।
18

4
লজিক্যাল প্রাইমারি কীটির জন্য জিইউডি ঠিক হতে পারে, তবে কখনও কখনও আপনার ক্লাস্টারিং কী হিসাবে কোনও গাইড গ্ল্যামটি ব্যবহার করবেন না - আপনি সূচক খণ্ডে ডুবে যাবেন কর্মক্ষমতা
বাজানোর জন্য

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

0

আপনি এটি বুঝতে পেরেছেন কিনা তা এটি একটি জটিল বিষয়। এই স্ট্যাকওভারফ্লো FAQ এর বিভাগের অধীনে পড়তে পারে।

আমি এখানে কোন ধরণের প্রশ্ন জিজ্ঞাসা করব না?

বিষয়গত, যুক্তিযুক্ত বা বর্ধিত আলোচনার প্রয়োজন এমন প্রশ্ন জিজ্ঞাসা করা থেকে বিরত থাকুন। এটি এমন প্রশ্নের উত্তর যা উত্তর দেওয়া যায়!

এটি বছরের পর বছর ধরে বিতর্কিত হয়েছে এবং বছরের পর বছর ধরে বিতর্ক অব্যাহত থাকবে। আমি দেখেছি sensকমত্যের একমাত্র ইঙ্গিতগুলি হ'ল উত্তরগুলি কিছুটা পূর্বাভাসের উপর নির্ভর করে যদি আপনি কোনও ওও লোককে জিজ্ঞাসা করেন (জিইডিগুলি কেবলমাত্র একমাত্র উপায়!), একটি ডেটা মডেলার (প্রাকৃতিক কীগুলিই কেবল একমাত্র উপায়!), বা একটি পারফরম্যান্স ভিত্তিক ডিবিএ (INTs হল একমাত্র উপায়!)।


আমি আলোচনা দীর্ঘায়িত হতে দেব না। আমি সাধারণ sensকমত্য দেখতে আগ্রহী ছিলাম।
পেরেপ্যুয়ালকোডার

4
আমি বলি আপনি যা চান প্রশ্ন জিজ্ঞাসা করুন! অন্যথায়, এই সম্প্রদায়টি অচল হয়ে উঠবে এবং উইকিপিডিয়াদের মতো অতিরিক্ত নিয়ন্ত্রণ করা হবে বলে মনে হয়। আমার কাছে এমন কিছু সময় লাগে যা আপনি চাইলে লোকেরা যা চাইবে তা জিজ্ঞাসা করতে দেয়। তাদের বিশ্বাস করুন এবং তারা নিজেরাই বিশ্বাস করতে পারে!
নিকোলাস লিওনার্ড
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.