প্রাথমিক কী বা অনন্য সূচক?


127

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

আমি একটি নতুন প্রকল্পের জন্য নতুন ডাটাবেস ডিজাইন করছি এবং আমার একটি দ্বিধা রয়েছে:

ডিবি তত্ত্বে, প্রাথমিক কীটি মৌলিক উপাদান, এটি ঠিক আছে তবে বাস্তব প্রকল্পগুলিতে উভয়ের সুবিধা এবং অসুবিধাগুলি কী?

আপনি প্রকল্পে কি ব্যবহার করবেন?

সম্পাদনা: ... এবং এমএস এসকিউএল সার্ভারে প্রাথমিক কী এবং প্রতিলিপি সম্পর্কে কী?


2
এখানে কিছু অতিরিক্ত বিবেচনা রয়েছে (কভারিং সূচকটির অতিরিক্ত প্রসঙ্গ থাকলেও
স্টুয়ার্টলসি

দ্রষ্টব্য: এসকিউএলাইট পৃথক পৃথক যে তারা উত্তরাধিকার সংক্রান্ত সমস্যার কারণে প্রাথমিক কীটি বাতিল করতে দেয় না। sqlite.org/lang_createtable.html
বিটিন

উত্তর:


168

একটি অনন্য সূচক কি?

একটি কলামে একটি অনন্য সূচক column কলামের একটি সূচক যা এই সীমাবদ্ধতাটিও প্রয়োগ করে যে আপনার দুটি কাতারে দুটি পৃথক সারিতে দুটি সমান মান থাকতে পারে না। উদাহরণ:

টেবিল টেবিল 1 তৈরি করুন (ফু ইন, বার ইনট);
টেবিল 1 (foo) অনন্য সূচক ux_table1_foo তৈরি করুন; - foo এ অনন্য সূচক তৈরি করুন।

টেবিল 1 এর মধ্যে অন্তর্ভুক্ত করুন (ফু, বার) ভ্যালু (1, 2); -- ঠিক আছে
টেবিল 1 এর মধ্যে অন্তর্ভুক্ত করুন (ফু, বার) ভ্যালু (2, 2); -- ঠিক আছে
টেবিল 1 এর মধ্যে অন্তর্ভুক্ত করুন (ফু, বার) ভ্যালু (3, 1); -- ঠিক আছে
টেবিল 1 এর মধ্যে অন্তর্ভুক্ত করুন (ফু, বার) ভ্যালু (1, 4); - ব্যর্থ!

কী 'ux_table1_foo' এর জন্য সদৃশ এন্ট্রি '1'

সর্বশেষ সন্নিবেশ ব্যর্থ হয়েছে কারণ এটি কলামে অনন্য সূচক লঙ্ঘন করে fooযখন এটি দ্বিতীয় বারের জন্য এই কলামটিতে 1 মান সন্নিবেশ করার চেষ্টা করে।

মাইএসকিউএলে একটি অনন্য সীমাবদ্ধতা একাধিক নূলে যাওয়ার অনুমতি দেয়।

একাধিক কলামে একটি অনন্য সূচি তৈরি করা সম্ভব।

প্রাথমিক কী বনাম অনন্য সূচক

জিনিস যা একই:

  • একটি প্রাথমিক কী একটি অনন্য সূচক বোঝায়।

বিষয়গুলি পৃথক:

  • একটি প্রাথমিক কীটি নালকে বোঝায় না, তবে একটি অনন্য সূচকটি নলযোগ্য হতে পারে।
  • কেবলমাত্র একটি প্রাথমিক কী থাকতে পারে তবে একাধিক অনন্য সূচক থাকতে পারে।
  • যদি কোনও ক্লাস্টারড সূচক সংজ্ঞায়িত না হয় তবে প্রাথমিক কীটি হবে ক্লাস্টারড ইনডেক্স।

4
নোট করুন যে একটি অনন্য সূচক কলামের একটি সূচক সম্পূর্ণ সঠিক নয় কারণ একটি অনন্য সূচক বা প্রাথমিক কীতে একাধিক কলাম অন্তর্ভুক্ত থাকতে পারে।
অ্যালেক্স জেসমিন

2
@ আলেকজান্দ্রে জেসমিন: স্থির ধন্যবাদ একাধিক কলাম সম্পর্কে অংশটি পরে উল্লেখ করা হয়েছে।
মার্ক বাইয়ার্স

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

3
তবে এখনও আমি তা পেলাম না, যখন প্রাথমিক কী ব্যবহার করতে হয় বা অনন্য সূচক কখন ব্যবহার করতে হয়? বা একই পরিস্থিতিতে উভয় হতে পারে।
অমিত

33

আপনি এটি দেখতে পারেন:

একটি প্রাথমিক কী অনন্য

একটি অনন্য মান এলিমেন্টের প্রতিনিধিত্বকারী হতে হবে না

অর্থ ?; ঠিক আছে, উপাদানটি সনাক্ত করতে একটি প্রাথমিক কী ব্যবহার করা হয়, আপনার যদি "ব্যক্তি" থাকে তবে আপনার ব্যক্তিগত পরিচয় নম্বর (এসএসএন বা এরকম) থাকতে হবে যা আপনার ব্যক্তির কাছে প্রাথমিক।

অন্যদিকে, ব্যক্তির একটি ইমেল থাকতে পারে যা অনন্য, তবে ব্যক্তিটিকে সনাক্ত করে না।

আমার কাছে সর্বদা প্রাথমিক কী থাকে, এমনকি সম্পর্কের টেবিলগুলিতেও (মিড-টেবিল / সংযোগ টেবিল) থাকতে পারে। কেন? ঠিক আছে আমি কোডিং করার সময় একটি মান অনুসরণ করতে পছন্দ করি, যদি "ব্যক্তি" এর একটি সনাক্তকারী থাকে তবে গাড়ির একটি সনাক্তকারী থাকে তবে ভাল - তবে ব্যক্তি -> গাড়ীরও একটি সনাক্তকারী থাকতে হবে!


আপনার সম্পর্কের টেবিলগুলিতে: আপনি কী বোঝাতে চেয়েছেন যে আপনি একটি কৃত্রিম প্রাথমিক কী (উদাহরণস্বরূপ একটি পূর্ণসংখ্যা) দিয়ে একটি নতুন কলামটি প্রবর্তন করেছেন বা আপনি কোনও সমন্বিত প্রাথমিক কী (person_id, car_id) ব্যবহার করেন?

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

1
সরোগেট প্রাথমিক কীটি আপনার যৌগিক / যোগদানের টেবিলের জন্য অন্য কাজ করে তা হ'ল ম্যানুয়াল কার্যগুলি রক্ষণাবেক্ষণ করা ease
রবার্ট সি বার্থ,

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

3
সম্পর্কের সাথে এর কোনও সম্পর্ক না থাকলে এর সাথে কী সম্পর্ক রয়েছে? আপনি একটি ক্ষেত্রের দিকে ইঙ্গিত করে বলেন, এটি প্রাথমিক। এবং? তাহলে কি হয়? এবং যদি কোনও প্রাকৃতিক পিকে না থাকে, আমি একটি কলাম এবং একটি ক্রম এবং একটি ট্রিগার এবং সমস্ত যুক্ত করি কারণ ____? কিছু কেবল প্রাথমিক হতে হবে। আমি কারণ ছাড়াই বিধি নিষেধ করা।

10

বিদেশী কীগুলি অনন্য বাধাগুলির পাশাপাশি প্রাথমিক কীগুলি নিয়ে কাজ করে। অনলাইন বই থেকে:

একটি বিদেশী মূল সীমাবদ্ধতা কেবলমাত্র অন্য টেবিলে একটি প্রাথমিক কী বাধা যুক্ত হতে হবে না; এটি অন্য সারণীতে একটি অনন্য বাধার কলামগুলি উল্লেখ করতে সংজ্ঞায়িত করা যেতে পারে

লেনদেনের প্রতিরূপের জন্য আপনার প্রাথমিক কী দরকার need অনলাইন বই থেকে:

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

উভয় উত্তর এসকিউএল সার্ভার 2005 এর জন্য।


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

5

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

উদাহরণ হিসাবে আমার কাছে নিম্নলিখিত সারণি রয়েছে:

CREATE TABLE toll_booths (
    id            INTEGER       NOT NULL PRIMARY KEY,
    name          VARCHAR(255)  NOT NULL,
    ...
    UNIQUE(name)
)

CREATE TABLE cars (
    vin           VARCHAR(17)   NOT NULL PRIMARY KEY,
    license_plate VARCHAR(10)   NOT NULL,
    ...
    UNIQUE(license_plate)
)

CREATE TABLE drive_through (
    id            INTEGER       NOT NULL PRIMARY KEY,
    toll_booth_id INTEGER       NOT NULL REFERENCES toll_booths(id),
    vin           VARCHAR(17)   NOT NULL REFERENCES cars(vin),
    at            TIMESTAMP     DEFAULT CURRENT_TIMESTAMP NOT NULL,
    amount        NUMERIC(10,4) NOT NULL,
    ...
    UNIQUE(toll_booth_id, vin)
)

আমাদের দুটি সত্তা সারণী ( toll_boothsএবং cars) এবং একটি লেনদেন সারণী ( drive_through) রয়েছে। toll_boothটেবিল একটি ভাড়াটে কী ব্যবহার কারণ এটির কোনো প্রাকৃতিক বৈশিষ্ট্য যে পরিবর্তন নিশ্চিত করা হয় না আছে (নাম সহজে পরিবর্তন করা যাবে)। দ্যcarsকারণ এটি একটি অ পরিবর্তন অনন্য শনাক্তকারী হয়েছে টেবিল একটি প্রাকৃতিক প্রাথমিক কী করে ( vin)। drive_throughলেনদেন টেবিল সহজে সনাক্ত করার জন্য একটি ভাড়াটে কী ব্যবহার করে, কিন্তু এছাড়াও চারিত্রিক বৈশিষ্ট্য আছে যেগুলো সময় রেকর্ড ঢোকানো হয় এ অনন্য হতে নিশ্চিত করা হয় একটি অনন্য বাধ্যতা হয়েছে।

http://datedia-programmer.blogspot.com এ এই বিশেষ বিষয়ে কিছু দুর্দান্ত নিবন্ধ রয়েছে।


4

প্রাথমিক কীগুলির কোনও অসুবিধা নেই।

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

হালনাগাদ:

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


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

3

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


3
টেবিলটি ক্লাস্টার্ড সূচক অনুসারে বাছাই করা হবে প্রাথমিক কী দ্বারা নয় not
রে বুয়সেন

1
এটি ঠিক তাই ঘটে যে বেশিরভাগ লোকেরা তাদের প্রাথমিক কীটি ক্লাস্টারড ইনডেক্স হিসাবে সেট করে।
রে বুয়সেন

যা আমরা জানি প্রায়শই সত্যই খারাপ ধারণা, যদি না আমরা আমাদের টেবিলগুলিতে হট স্পট এবং ভারসাম্যহীন সূচক গাছ পছন্দ করি না ...
মাইক উডহাউস

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

2

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


2

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


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

থ্যাঙ্কস গ্রেগম্যাক, আমি নিশ্চিত ছিলাম না, এমএস যদি এটি অনুসরণ করে। আমি এর সাথে কিছু এমএস কিরকসকে স্মরণ করেছি, যদিও কয়েক বছর আগে (2000 এর পূর্ব) এবং এটি একটি পুরানো অ্যাক্সেস-ডিবি কাশিও
পিটার পার্কার

2

রিলেশনাল ডেটা থিওরিতে প্রাথমিক কী বলে কোনও জিনিস নেই, তাই আপনার প্রশ্নের ব্যবহারিক স্তরে উত্তর দিতে হবে।

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

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

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


এমএস এসকিউএল সার্ভারের একটি প্রাথমিক কী সর্বদা অনন্য এবং নাল উভয়ই নয় - যেমন এটি সত্যিই কেবল একটি অনন্য সূচক, তবে অতিরিক্ত নিষেধাজ্ঞার সাথে বলা যায় যে এটি বাতিল হতে পারে না।
marc_s

ওরাকল একটি অ-অনন্য সূচক দিয়ে একটি অনন্য প্রতিবন্ধকতা প্রয়োগ করতে পারে। এমএসএসএস না পারলে আমি অবাক হব। "এটি সত্যিই কেবল একটি অনন্য সূচক" বলা একটি বিরক্তি।

"অনেক ক্ষেত্রে, একটি বিদেশী কী এর কুলমন (গুলি) এর উপর একটি সূচক ঘোষণা করা দ্রুত গতিতে যোগ দেয়" " ডেটা গুদামজাতকরণ বিশ্বে এটি প্রায়শই সত্য নয় যেখানে যদি পাওয়া যায় তবে হ্যাশ যোগ দেবে।
JAC2703

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

2

ক্লাস্টারড ইন্ডেক্সেস বনাম ইউনিক ইন্ডেক্সের কিছু অসুবিধা রয়েছে।

ইতিমধ্যে উল্লিখিত হিসাবে, একটি ক্লাস্টার্ড সূচকগুলি শারীরিকভাবে সারণিতে থাকা ডেটার আদেশ দেয় orders

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

আপেক্ষিক ছোট টেবিলগুলিতে, এটি ঠিক আছে তবে গিগাবাইটের মূল্যবান ডেটা, এবং সন্নিবেশকারী / মুছে ফেলা বাছাইয়ের উপর প্রভাব ফেলে এমন টেবিলগুলিতে পৌঁছালে আপনি সমস্যার মুখোমুখি হবেন।


তাহলে কি লাভ? বাছাই করা প্রশ্নগুলি দ্রুত হয়? আপনি যখন আপনার বেশিরভাগ ডেটা একবার (বা খুব কমই) লিখে এবং সারাক্ষণ জিজ্ঞাসা করেন তখন কি এটি ব্যবহারের ক্ষেত্রে ভাল?
মহিষ

1

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

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


"আমি সংখ্যার প্রাথমিক কী ছাড়া প্রায় কোনও টেবিল তৈরি করি না": কেন সর্বদা সংখ্যাসূচক? একটি প্রাথমিক কীটি সংখ্যাসূচক হওয়ার দরকার নেই (এটি কোনওভাবেই স্বয়ংক্রিয়রকম হওয়া প্রয়োজন)।
Hibou57

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

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

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

1

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

একমাত্র অবশিষ্ট পার্থক্যটি হ'ল, আপনার একাধিক not নাল অনন্য সূচক থাকতে পারে, যখন আপনার একাধিক প্রাথমিক কী থাকতে পারে না।

(*) ব্যবহারিক পার্থক্য বাদে: একটি প্রাথমিক কী কোনও বিদেশী কী সংজ্ঞায়নের মতো কিছু ক্রিয়াকলাপের জন্য ডিফল্ট অনন্য কী হতে পারে। যাত্রা। যদি কোনও একটি সারণী উল্লেখ করে কোনও বিদেশী কী সংজ্ঞায়িত করে এবং কলামের নাম সরবরাহ না করে, যদি রেফারেন্সযুক্ত সারণীতে একটি প্রাথমিক কী থাকে, তবে প্রাথমিক কীটি রেফারেন্সযুক্ত কলাম হবে। অন্যথায়, রেফারেন্সযুক্ত কলামটির নাম স্পষ্টভাবে লিখতে হবে।

অন্যরা এখানে ডিবি-র প্রতিরূপ উল্লেখ করেছেন, তবে আমি এটি সম্পর্কে জানি না।


0

অনন্য সূচকের একটি নুল মান থাকতে পারে। এটি নন-ক্লাস্টার্ড সূচক তৈরি করে। প্রাথমিক কীতে নুল মান থাকতে পারে না। এটি ক্লাস্টার্ড সূচক তৈরি করে।


0

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


-1

যদি এটা আমার উপর নির্ভর করে ...

আপনার ডেটাবেস এবং আপনার অ্যাপ্লিকেশনগুলির প্রয়োজনীয়তাগুলি পূরণ করতে হবে।

প্রাথমিক কী হিসাবে পরিবেশন করতে প্রতিটি টেবিলটিতে একটি স্বয়ং-বর্ধক পূর্ণসংখ্যা বা লম্বা আইডি কলাম যুক্ত করা ডেটাবেস প্রয়োজনীয়তার যত্ন নেয়।

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

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

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

এটি আপনার আবেদনের প্রয়োজনীয়তার যত্ন করে।

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

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