সারণীতে প্রাথমিক কীগুলির জন্য সেরা অনুশীলনটি কী?


255

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

  1. সনাক্তকরণের পূর্ণসংখ্যা কলামটি স্বয়ংক্রিয়ভাবে বৃদ্ধি পায়।
  2. স্বতন্ত্র সনাক্তকারী (জিইউইডি)
  3. একটি সংক্ষিপ্ত অক্ষর (x) বা পূর্ণসংখ্যার (বা অন্যান্য অপেক্ষাকৃত ছোট সংখ্যার ধরণের) কলাম যা সারি সনাক্তকারী কলাম হিসাবে পরিবেশন করতে পারে

সংখ্যা 3 মোটামুটি ছোট দেখার জন্য ব্যবহৃত হত, বেশিরভাগই সারণীগুলি পড়তে পারে যেগুলির একটি অনন্য স্ট্যাটিক দৈর্ঘ্যের স্ট্রিং কোড থাকতে পারে, বা একটি সংখ্যা বা একটি সংখ্যা বা অন্যান্য সংখ্যার মতো একটি মান সংখ্যা থাকতে পারে।

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

প্রশ্নটি :-)

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

  • DATETIME / চরিত্র
  • DATETIME / পূর্ণসংখ্যা
  • DATETIME / varchar
  • গৃহস্থালির কাজ / nvarchar / nvarchar

এর জন্য কোন বৈধ মামলা আছে? আমি এই ক্ষেত্রেগুলির জন্য একটি পরিচয় বা অনন্য শনাক্তকারী কলামটি সর্বদা সংজ্ঞায়িত করতাম।

এছাড়াও প্রাথমিক কী ছাড়া অনেকগুলি সারণী রয়েছে। এর জন্য বৈধ কারণগুলি, যদি থাকে তবে কী?

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

তৃতীয় প্রশ্ন আমাকে উত্তরগুলি বোঝাতে সাহায্য করুন: একাধিক কলামগুলি যৌগিক প্রাথমিক কী সমন্বিত করতে ব্যবহৃত হয়, এই পদ্ধতিতে বনাম কোনও সার্গেট / কৃত্রিম কী কী কোনও নির্দিষ্ট সুবিধা রয়েছে? আমি বেশিরভাগ কর্মক্ষমতা, রক্ষণাবেক্ষণ, প্রশাসন ইত্যাদির ক্ষেত্রেই ভাবছি?


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

উত্তর:


253

আমি কয়েকটি বিধি অনুসরণ করি:

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

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


3
আমি এটা পছন্দ করি! আপনার "বিধি" এর ভিত্তিতে কোনও ডকুমেন্টেশন আছে কি? ধন্যবাদ!
লয়েড কোটেন

4
না, শুধু অভিজ্ঞতা। "ছোট" ডাটাবেসগুলির সাথে ডিল করার সময় এই জিনিসগুলি এতটা গুরুত্ব দেয় না। তবে আপনি যখন বড় ডিবি'র সাথে সামান্য জিনিসগুলি মোকাবেলা করেন। আপনি যদি পাঠ বা নির্দেশিকা ব্যবহারের তুলনায় আপনার কাছে 1 বিলিয়ন সারি ইন্ট বা লম্বা পিকে সহ সারি করে থাকেন তা ভেবে দেখুন। একটি বিশাল পার্থক্য আছে!
লজিকালমাইন্ড

44
যখন আপনি কোনও আর্টিকাল কী ব্যবহার করেন তখন প্রাকৃতিক কীতে (যদি এমন একটি উপস্থিত থাকে যা প্রায়শই ক্ষেত্রে হয় না) ঠিক সেই অনন্য সূচকটি রেখে দিতে ভুলবেন না।
এইচএলজিএম

3
@ লয়েড কোটেন: বিধি সংখ্যা 1: স্কাইফাউন্ড্রি / ফর্ম / টপিক / ২৪ এর সমর্থনে একটি বড় ডেটা ইঞ্জিন সরবরাহকারী যা বলেছেন তা এখানে । এটা আমার কাছে ফিরে যেতে প্রতীত Intগুলি
hobs

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

90

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

  • মার্কিন যুক্তরাষ্ট্র: আমি টেক্সাসের জন্য state_id = 1 এর পরিবর্তে state_code (টেক্সাসের জন্য 'TX') যাব
  • কর্মচারী: আমি সাধারণত একটি কৃত্রিম কর্মচারী_আইডি তৈরি করতাম কারণ অন্য যে কোনও কাজ করে তা খুঁজে পাওয়া শক্ত hard এসএসএন বা সমতুল্য কাজ করতে পারে তবে নতুন জোয়ারের মতো সমস্যা থাকতে পারে যিনি এখনও তার এসএসএন সরবরাহ করেন নি।
  • কর্মচারীদের বেতনের ইতিহাস: (কর্মী_আইডি, শুরু_ তারিখ)। আমি কোনও শৈল্পিক কর্মচারী_সালারি_ istতিহাসিক_আইডি তৈরি করব না । এটি কোন বিষয়টি উপস্থাপন করবে ( "মূর্খ ধারাবাহিকতা ব্যতীত ) "

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

state_id    state_code   state_name
137         TX           Texas
...         ...          ...
249         TX           Texas

9
এসকিউএল সার্ভার ২০০৫/২০০৮ এর কিছু ক্ষেত্রে প্রাকৃতিক (পাঠ্য) কীটি কোনও ইন-কী -র চেয়ে দ্রুততর হতে পারে। আমার কাছে একটি অ্যাপ রয়েছে যা 7-8 অক্ষরের বন্ধুত্বপূর্ণ কোড যা আমরা প্রাথমিক কী হিসাবে ব্যবহার করি এবং এটি কোনও ইন সার্গেটের চেয়ে দ্রুত (এবং প্রায়শই বেশি সুবিধাজনক) ছিল। আমাদের যেভাবেই কোডটির প্রয়োজন ছিল যাতে আমাদের একটি মানব পাঠযোগ্য / স্মরণীয় কোড থাকে যা আমরা কোনও বিরোধী অ্যাপ্লিকেশন দৃষ্টান্তে দ্বন্দ্ব ছাড়াই নিরাপদে স্থানান্তর করতে পারি (একাধিক সাইট যা বৃহত্তর সাইটে একত্রিত হয়)।
lambacck

1
+1 ভাল উত্তর। যাইহোক, আমি কর্মী পরিচয়কারীকে একজন কর্মী শনাক্তকরণের বিশ্বস্ত উত্স হিসাবে পেয়ে যাব - বাস্তব জীবনে কর্মচারীদের যাচাই করার জন্য দায়িত্বপ্রাপ্ত কর্মকর্তা যারা এসএসএন এর মতো সনাক্তকারী ব্যবহার করতে পারবেন, রেফারেন্স গ্রহণ করবেন ইত্যাদি। কর্মী বিভাগ অবশ্যই আস্থা রাখতে হবে কর্মচারী শনাক্তকারীদের উত্স, ডিবিএমএস নয়!
onedaywhen

@ onedaywhen- আমি চাইনি। কর্মী অফিসার বিশ্বাস। লোকেরা চলে যায়, নতুন আসে এবং বিভিন্ন ধারণা পায়। তাদের সনাক্তকরণকারীর কাছে তাদের অ্যাক্সেস সরবরাহ করুন যা তারা মনে করেন যে এটি অনন্য / তারা ব্যবহার করতে চায় তবে অভ্যন্তরীণভাবে ডিবি-র জন্য ডিবিএকে তাদের নিজস্ব সিদ্ধান্ত নেওয়া উচিত
ডেভ পাইল

1
মনে রাখবেন যে এসএসএন প্রতিটি দেশে অগত্যা অনন্য নয়। কমপক্ষে অস্ট্রিয়ায়, একাধিক লোক একই সংখ্যা ভাগ করতে পারে
মাজা

কিছু দেশে (আমি এমনকি মার্কিন যুক্তরাষ্ট্রেও ভাবি) তারা এসএসএন ভাগ না করার পরামর্শ দেয়।
স্টিজন ডি উইট

25

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

ধরা যাক আমাদের এই টেবিল এবং কলাম আছে:

Company:
  CompanyId   (primary key)

CostCenter:
  CompanyId   (primary key, foreign key to Company)
  CostCentre  (primary key)

CostElement
  CompanyId   (primary key, foreign key to Company)
  CostElement (primary key)

Invoice:
  InvoiceId    (primary key)
  CompanyId    (primary key, in foreign key to CostCentre, in foreign key to CostElement)
  CostCentre   (in foreign key to CostCentre)
  CostElement  (in foreign key to CostElement)

যদি শেষ বিটটি বোঝায় না, Invoice.CompanyIdতবে দুটি বিদেশী কীগুলির একটি অংশ, একটি কস্টকেন্টার টেবিলের এবং একটি কোস্টেলমেন্ট টেবিলের। প্রাথমিক কী (হয় InvoiceId , CompanyId )।

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

স্ক্রু করার সম্ভাবনা যত কম হবে তত ভাল।


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

24

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

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


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

13

বিভিন্ন ক্ষেত্র থেকে আপনার প্রাথমিক কী তৈরি করতে কোনও সমস্যা নেই, এটি একটি প্রাকৃতিক কী

সার্গ্রেট কী তৈরি করতে আপনি একটি পরিচয় কলাম (প্রার্থী ক্ষেত্রগুলির একটি অনন্য সূচকের সাথে যুক্ত) ব্যবহার করতে পারেন ।

এটি একটি পুরানো আলোচনা। আমি বেশিরভাগ পরিস্থিতিতে সারোগেট কীগুলি পছন্দ করি।

তবে চাবি না থাকার জন্য কোনও অজুহাত নেই।

পুন: সম্পাদনা

হ্যাঁ, সে সম্পর্কে অনেক বিতর্ক রয়েছে: ডি

আমি প্রাকৃতিক কীগুলির কোনও সুস্পষ্ট সুবিধা দেখতে পাচ্ছি না, এগুলি ছাড়াও যে তারা প্রাকৃতিক পছন্দ। আপনি আইডিপারসনের পরিবর্তে সর্বদা নাম, সোশ্যাল নাম্বার - বা এর মতো কিছুতে ভাববেন

প্রাকৃতিক কীগুলি হ'ল (উদাহরণস্বরূপ পরিবর্তনগুলি প্রচার করে) কিছু সমস্যার উত্তর সার্গ্রেট কীগুলি।

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

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


13
লোকেরা প্রাকৃতিক কীগুলি দিয়ে "আরও ভাল ভাবে"। মেশিন এবং ডাটাবেস, না।
এফডিসিস্টেল

11

টেবিলগুলির সারাক্ষণ একটি প্রাথমিক কী থাকা উচিত। যখন এটি না হয় এটি একটি স্বয়ংক্রিয়তা ক্ষেত্র হওয়া উচিত ছিল।

কিছু সময় লোকেরা প্রাথমিক কী বাদ দেয় কারণ তারা প্রচুর ডেটা স্থানান্তর করে এবং এটি প্রক্রিয়াটি ধীরে ধীরে (ডাটাবেসের উপর নির্ভরশীল) হতে পারে। কিন্তু এটির পরে এটি যুক্ত করা উচিত।

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


আমি রাজী. এবং যেখানে প্রচুর ডেটা sertedোকানো হয়, সেই ক্ষেত্রে প্রাথমিক কী বাধাটি সরিয়ে ফেলুন (বা টিএসকিউএল-তে INSERT পরিচয় ব্যবহার করুন) এবং পরে এটি পিছনে রেখে দিন :)
এন্ড্রু রোলিংস

1
ব্যতিক্রম রয়েছে: লিঙ্ক টেবিলগুলি স্পষ্টতই
অন্নাকাটা

অন্য কারণ: পিকে / অনন্য কী না থাকলে, টেবিল ব্রাউজারগুলি (মানে, অ্যাক্সেস / এসকিউএল সার্ভার ম্যানেজমেন্ট স্টুডিওর মতো কিছু) নকল সারি সহ একটি একক সারি আপডেট / মুছতে অস্বীকার করবে। তার জন্য আপনাকে এসকিউএল লিখতে হবে।
ডেনিস সি

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

9

এই সমস্ত ভাল উত্তর ছাড়াও, আমি সবেমাত্র পড়া একটি ভাল নিবন্ধটি ভাগ করতে চাই, দুর্দান্ত প্রাথমিক-মূল বিতর্ক

কেবল কয়েকটি পয়েন্ট উদ্ধৃত করতে:

প্রতিটি টেবিলের জন্য প্রাথমিক কী বেছে নেওয়ার সময় বিকাশকারীকে কয়েকটি নিয়ম প্রয়োগ করতে হবে:

  • প্রাথমিক কীটি অবশ্যই প্রতিটি রেকর্ড স্বতন্ত্রভাবে সনাক্ত করতে পারে।
  • একটি রেকর্ডের প্রাথমিক-কী মানটি শূন্য হতে পারে না।
  • রেকর্ডটি তৈরি হওয়ার সময় প্রাথমিক কী-মান অবশ্যই বিদ্যমান।
  • প্রাথমিক কী অবশ্যই স্থিতিশীল থাকতে হবে — আপনি প্রাথমিক-কী ক্ষেত্র (গুলি) পরিবর্তন করতে পারবেন না।
  • প্রাথমিক কীটি অবশ্যই কমপ্যাক্ট হতে হবে এবং খুব কম সম্ভাব্য বৈশিষ্ট্য থাকতে পারে।
  • প্রাথমিক-কী মানটি পরিবর্তন করা যায় না।

প্রাকৃতিক কীগুলি (ঝোঁক) নিয়মগুলি ভঙ্গ করে। সারোগেট কীগুলি বিধি মেনে চলে। (আপনি সেই নিবন্ধটির মাধ্যমে আরও ভাল করে পড়ুন, এটি আপনার সময়ের জন্য উপযুক্ত!)


7

প্রাথমিক কী সম্পর্কে বিশেষ কী?

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

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

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

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

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

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


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

6

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

যদি কেবল তারিখের সময়টি অর্থবহ হয় এবং চরটি এটি অনন্য করার জন্য সবেমাত্র ব্যবহার করা হয় তবে আপনি সম্ভবত একটি চিহ্নিত ক্ষেত্র নিয়ে যেতে পারেন।


9
সাধারণত সেরা? আমার কোনও বৈজ্ঞানিক ভিত্তি নেই তবে আমি প্রায় ইতিবাচক মানুষ প্রাকৃতিকের চেয়ে একটি সারোগেট কী পছন্দ করেন। অনেক ক্ষেত্রে কোনও প্রাকৃতিক কী নেই।
জে.সি.

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

2
যদি, আপনার পৃথিবীতে, সারণীতে কোনও সারি চিহ্নিত করার একমাত্র উপায় হিসাবে এটি নির্ধারিত হয়েছে তবে হ্যাঁ। অবশ্যই, যখন কোনও ডিজাইনার কোনও পিকে-র জন্য কোনও জিইউইডি তৈরি করতে পছন্দ করেন কারণ সাধারণত তারা প্রকৃত প্রাকৃতিক কীটি সন্ধান করার জন্য কাজটি করেননি, তাই সেই ক্ষেত্রে জিইউডি প্রাকৃতিক কী নয়।
টম এইচ

8
২. আপনি যদি প্রাকৃতিক বিশ্ব থেকে আপনার চাবি নেন তবে প্রাকৃতিক জগতটি আপনার চাবিটি ভাঙ্গতে পরিবর্তিত হবে। আপনি যদি টেলিফোন নম্বরটি ব্যবহার করেন তবে আপনি একই পরিবার থেকে দুটি ব্যবহারকারী পাবেন। আপনি যদি পদবি ব্যবহার করেন তবে তাদের বিয়ে হয়। আপনি যদি এসএসএন ব্যবহার করেন তবে গোপনীয়তা আইনগুলি পরিবর্তিত হবে এবং আপনাকে সেগুলি সরানোর প্রয়োজন হবে।
জেমস অর

2
@ ব্যারি: আরই: # 2 যদি প্রাকৃতিক জগত পরিবর্তিত হয় এবং এর ফলে আপনার প্রাকৃতিক কী পরিবর্তিত হয় তার অর্থ হল যে আপনি একটি প্রাকৃতিক কী নির্বাচন করে একটি খারাপ কাজ করেছেন। সংজ্ঞা অনুসারে সময়ের সাথে সাথে একটি প্রাকৃতিক কী পরিবর্তিত হয় না।
টম এইচ

6

উন্নত অভিজ্ঞতার 25+ বছরের পরে আমি থাম্বগুলির নিজস্ব নিয়মটি স্থির করেছি।

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

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

সর্বদা একটি একক মানের প্রাথমিক কী থাকা ইউপিএসআরটি সম্পাদনাকে খুব সোজা করে তোলে।

আপনার অ্যাপ্লিকেশনটিতে অর্থ রয়েছে এমন বহু-কলাম কীগুলি সমর্থন করতে অতিরিক্ত সূচকগুলি ব্যবহার করুন।


5

প্রাকৃতিক বনাম কৃত্রিম কীগুলি আপনার ডাটাবেসে আপনি কতটা ব্যবসায়িক যুক্তি চান তা হ'ল বিষয়টি is সামাজিক সুরক্ষা নম্বর (এসএসএন) একটি দুর্দান্ত উদাহরণ।

"আমার ডাটাবেসের প্রতিটি ক্লায়েন্টের একটি এসএসএন থাকবে এবং অবশ্যই হবে" " বাম, সম্পন্ন, এটিকে প্রাথমিক কী তৈরি করুন এবং এটি দিয়ে সম্পন্ন করুন। আপনার ব্যবসায়িক নিয়ম কখন বদলে যায় তা মনে রাখবেন।

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


8
এবং আমি ডেটা দেখেছি যেখানে এসএসএন হওয়া উচিত যদিও অনন্য নয়। আপনি যদি অন্য উত্স থেকে আপনার ডেটা আমদানি করেন তবে প্রাকৃতিক কীগুলি সম্পর্কে খুব সাবধান থাকুন!
এইচএলজিইএম

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

4

আমি সন্দেহ করি যে স্টিভেন এ। লো এর রোলড আপ সংবাদপত্রের থেরাপি মূল ডেটা স্ট্রাকচারের ডিজাইনারের জন্য প্রয়োজনীয়।

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


2
এর পারফরম্যান্স হগ বলতে একটি অকাল অপটিমাইজেশন। কিছু ক্ষেত্রে গাইড বিচ্ছিন্ন করা প্রয়োজন (সংযোগ বিচ্ছিন্ন ক্লায়েন্ট, ভবিষ্যতের টেবিল মার্জিং, প্রতিলিপি)
জে.সি.

2
"অকাল অপ্টিমাইজেশন" হ'ল এসও (আইএমএইচও) এর একটি অতিরিক্ত ব্যবহৃত বাক্য! হ্যাঁ, কয়েকটি ক্ষেত্রে জিইউইডিগুলির প্রয়োজন হতে পারে তবে অ্যান্ড্রু সঠিকভাবে এটি উল্লেখ করতে পারে যে সেগুলি ডিফল্ট ডেটা টাইপ হিসাবে ব্যবহার করা উচিত নয় বা প্রয়োজন নেই।
টনি অ্যান্ড্রুজ 16

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

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

আমি উভয় কলাম ব্যবহার করছি। তবে এটি ভুল কিনা তা নিশ্চিত নয়। আপনি এটি @ অ্যান্ড্রু রোলিংস খুঁজে পেয়েছেন?
YÎGÎ

3

আপনার একাধিক ক্ষেত্র সমন্বিত একটি 'যৌগিক' বা 'যৌগিক' প্রাথমিক কী ব্যবহার করা উচিত।

এটি একটি নিখুঁতভাবে গ্রহণযোগ্য সমাধান, আরও তথ্যের জন্য এখানে যান :)


3

আমিও সর্বদা একটি সংখ্যার আইডি কলাম ব্যবহার করি। ওরাকলটিতে আমি সংখ্যাটির (18,0) সংখ্যাটি উপরে (12,0) উপরের কোনও কারণের জন্য ব্যবহার করি না (বা দীর্ঘের চেয়ে কোনও প্রকারের পরিমাণ যাই হোক না কেন), সম্ভবত আমি কয়েক বিলিয়ন সারি পাওয়ার বিষয়ে কখনও চিন্তা করতে চাই না ডিবি!

আমি বেসিক ট্র্যাকিংয়ের জন্য একটি তৈরি এবং পরিবর্তিত কলাম (টাইমস্ট্যাম্প টাইপ) অন্তর্ভুক্ত করেছি, যেখানে এটি দরকারী মনে হয়।

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


2
আমার অবশ্যই এটি উল্লেখ করতে হবে যে আমি লিঙ্ক / যোগদানের টেবিলগুলিতে আইডি রাখি না, কেবলমাত্র ডেটাযুক্ত টেবিলগুলিতে।
জিবিবি

3

আমি প্রাকৃতিক প্রাথমিক কীগুলি সন্ধান করি এবং যেখানে আমি পারি সেগুলি ব্যবহার করি।

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

টেবিলগুলিতে যেগুলি বহু-সংখ্যক কাপলিং হয় আমি বিদেশী কীগুলির একটি যৌগিক প্রাথমিক কী ব্যবহার করি।

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


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

1
@ লয়েড - খুশী যে আপনি এমন কোনও কিছুর প্রতি আগ্রহী হচ্ছেন যা আমি নিজেকে খুব আকর্ষণীয় মনে করি। এমএসডিএন.মাইক্রোসফটকম /en-us/library/ms177443(SQL.90).aspx
গুজে

2

আমি সর্বদা স্বায়ত্তশাসন বা পরিচয় ক্ষেত্র ব্যবহার করি।

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


6
কোনও বিকাশকারী দ্বারা প্রাকৃতিক কীটি খুব কম নির্বাচনের অর্থ এই নয় যে প্রাকৃতিক কীগুলি খারাপ bad
টম এইচ

1
যে সরঞ্জামটি ব্যবহার করা শক্ত তা কোনওভাবে সেই সরঞ্জামটির বিরুদ্ধে কোনও বিন্দু নয়?
স্কাইকি

1

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

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


1

আপনি যদি এই বয়সের পুরানো বিতর্কে সত্যই পিছনে পিছনে পড়তে চান তবে স্ট্যাক ওভারফ্লোতে "প্রাকৃতিক কী" অনুসন্ধান করুন। আপনার ফলাফলের পৃষ্ঠাগুলি ফিরে পাওয়া উচিত।


1

GUIDs প্রাথমিক কী হিসাবে ব্যবহার করা যেতে পারে তবে আপনাকে সঠিক ধরণের জিইউডি তৈরি করতে হবে যাতে এটি ভাল সম্পাদন করে।

আপনাকে COMB জিইউডিগুলি তৈরি করতে হবে। এ সম্পর্কে একটি ভাল নিবন্ধ এবং পারফরম্যান্সের পরিসংখ্যান হ'ল প্রাথমিক কী হিসাবে জিইউইডিগুলির ব্যয়

এছাড়াও এসকিউএল-সিওএমবি জিইউইডি তৈরির কয়েকটি কোড ইউনিকডেফায়ার বনাম পরিচয় ( সংরক্ষণাগার ) এ রয়েছে


5
আইএমএইচও, নির্দেশিকা কেবল তখনই ব্যবহার করা উচিত যখন আপনাকে ডাটাবেসগুলির মধ্যে ডেটা সিঙ্ক্রোনাইজ করতে হবে। যার মধ্যে একটি স্বয়ংক্রিয়ভাবে উত্পন্ন আইডি সমস্যাযুক্ত। একটি গাইড ব্যবহার এবং একটি মৌলিক সংখ্যাসূচক প্রকারের মধ্যে পার্থক্য হ'ল একটি গাইডের জন্য সারি প্রতি 16 বাইট প্রয়োজন হবে, যখন একটি সংখ্যাটি আরও ছোট হবে।
লজিকালমাইন্ড

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

0

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


1
এই কৌশলটি তখন পৃথক হয়ে যায় যখন আপনাকে এখন আসল দুটি টেবিলগুলিতে যোগ দিতে 6 টি টেবিলগুলি অতিক্রম করতে হবে কারণ আপনার সম্মিলিত কীগুলি প্রচার করা হয়নি। এটি একাধিক সন্নিবেশগুলির জন্য লুপ / ​​কার্সার ব্যবহারের প্রয়োজন হয় যা একটি বিশাল পারফরম্যান্স হগ হতে পারে।
টম এইচ

2
আমি নতুন কিছু শিখতে বড় হই না। আপনি যা বলছেন তার একটি উদাহরণ দেখতে আমি পছন্দ করব, এই ধার্মিক কিছু যুক্তির মধ্যে কিছুটা যুক্তিযুক্ত সত্যকে ইনজেক্ট করা সহায়ক হবে।
ড্যান ব্লেয়ার

0

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

  • সারি আইডি (জিইউইডি)
  • স্রষ্টা (স্ট্রিং; বর্তমান ব্যবহারকারীর নামের একটি ডিফল্ট রয়েছে ( SUSER_SNAME()টি-এসকিউএল এ))
  • তৈরি করা হয়েছে (তারিখের সময়)
  • টাইমস্ট্যাম্প

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

এদিকে, প্রকৃত পিকে যদি সম্ভব হয় তবে একটি প্রাকৃতিক কী। আমার অভ্যন্তরীণ নিয়মগুলি হ'ল:

  • লোক - সারোগেট কী ব্যবহার করে, যেমন INT। যদি এটি অভ্যন্তরীণ হয় তবে অ্যাক্টিভ ডিরেক্টরি ব্যবহারকারী জিইউডি একটি গ্রহণযোগ্য পছন্দ
  • সারণী সন্ধান (যেমন স্ট্যাটাস কোডস) - একটি সংক্ষিপ্ত CHAR কোড ব্যবহার করুন; আইএনটি-র তুলনায় এটি মনে রাখা সহজ, এবং অনেক ক্ষেত্রে কাগজ ফর্ম এবং ব্যবহারকারীরাও এটি ব্রিভিটির জন্য ব্যবহার করবেন (যেমন স্থিতি = "ই" "মেয়াদউত্তীর্ণ" এর জন্য "," এ "" অনুমোদিত "এর জন্য" ন্যাডিস "" অ্যাসবেস্টস সনাক্ত করা হয়নি ") নমুনায় ")
  • লিঙ্ক সারণী - এফকে সমন্বিত (যেমন EventId, AttendeeId)

সুতরাং আদর্শভাবে আপনি একটি প্রাকৃতিক, মানব-পঠনযোগ্য এবং স্মরণীয় পিকে, এবং একটি ওআরএম-বান্ধব ওয়ান-আইডি-প্রতি-সারণী জিইউইডি দিয়ে শেষ করেন।

ক্যাভেট: আমি যে ডাটাবেসগুলি বজায় করি সেগুলি মিলিয়ন বা বিলিয়নের পরিবর্তে 100,000s রেকর্ডের দিকে ঝুঁকছে, সুতরাং আপনার যদি আমার পরামর্শকে বিপরীত করে এমন বৃহত সিস্টেমের অভিজ্ঞতা থাকে তবে আমাকে অবহেলা করতে নির্দ্বিধায়!


1
আপনি কি কোনও শক্তিশালী প্রাকৃতিক কী ছাড়াই টেবিলগুলির জন্য উভয় GUID এবং INT এসকে তৈরি করার পরামর্শ দিচ্ছেন ?

আপনার দরকার নেই তবে সুবিধাগুলি হ'ল: ক) আপনার প্রয়োজন হলে এটি প্রতিরূপকরণকে সহজ করে তোলে, খ) ওআরএম এর সাথে কাজ করার সময়, আপনি সংরক্ষণের আগে কোডটিতে আপনার অবজেক্টের জন্য একটি অনন্য আইডি নির্ধারণ করতে পারেন (যা আপনি যদি কার্যকর তবে কার্যকর আপনার অবজেক্টে প্রচুর এডিটিং করতে হবে, সম্ভবত এটি সেশনের ক্যাশে সংরক্ষণ করার আগে)। কীটি এই ইনস্ট্যাসের আইএনটি; জিইউইডিটি কেবল একটি বোনাস।
কিথ উইলিয়ামস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.