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


উত্তর:


559

একটি সারণীতে একটি সমন্বিত প্রাথমিক কী থাকতে পারে যা দুটি বা ততোধিক কলাম থেকে তৈরি প্রাথমিক কী। উদাহরণ স্বরূপ:

CREATE TABLE userdata (
  userid INT,
  userdataid INT,
  info char(200),
  primary key (userid, userdataid)
);

আপডেট: এখানে সম্মিলিত প্রাথমিক কীগুলির আরও বিশদ বিবরণের একটি লিঙ্ক রয়েছে।


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

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

195

আপনার কাছে কেবল একটি প্রাথমিক কী থাকতে পারে তবে আপনার প্রাথমিক কীতে আপনার একাধিক কলাম থাকতে পারে।

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


39

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

প্রার্থী কীগুলি আপেক্ষিক ডেটা মডেলের একটি মৌলিক ধারণা।

এটি সাধারণ অনুশীলন, যদি একাধিক কী এক টেবিলে উপস্থিত থাকে, প্রার্থী কীগুলির মধ্যে একটিকে প্রাথমিক কী হিসাবে মনোনীত করতে। টেবিলে কোনও বিদেশী কীগুলি অন্য কোনও প্রার্থী কী-এর পরিবর্তে প্রাথমিক কীটি উল্লেখ করার পক্ষে সাধারণ অনুশীলন।

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


5
একমত। লজিক্যাল মডেলটিতে সমস্ত কী সমান (কোনওটিই 'প্রাথমিক' নয়)। শারীরিক বাস্তবায়নে কোন কীটির পছন্দটি মূল কী উপাধি পায় তা সালিসি এবং বিক্রেতা / পণ্য নির্ভর।
onedaywhen

3
আমি বলব এটি ডেটাবেস ডিজাইনার নির্ভর dependent
ওয়াল্টার মিট্টি

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

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

আমি মনে করি যে পিকে ন্যূনতম হওয়া দরকার, অর্থাত প্রতিটি রেকর্ডকে স্বতন্ত্ররূপে সনাক্ত করতে সর্বনিম্ন সংখ্যক কলাম ব্যবহার করুন।
গ্যারি

14

এটি মূল প্রশ্নের এবং @ কাল্মির প্রশ্নের উভয়েরই উত্তর

একাধিক স্বতঃ-উত্পাদক কলামগুলি কী লাভ করবে?

নীচের এই কোডটিতে একটি সম্মিলিত প্রাথমিক কী রয়েছে। এর কলামগুলির একটি হ'ল স্ব-বর্ধিত। এটি কেবল মাইআইএসএএম-এ কাজ করবে। InnoDB একটি ত্রুটি তৈরি করবে " ERROR 1075 (42000): ভুল সারণী সংজ্ঞা; শুধুমাত্র একটি স্বয়ংক্রিয় কলাম থাকতে পারে এবং এটি অবশ্যই কী হিসাবে সংজ্ঞায়িত করা উচিত "।

DROP TABLE IF EXISTS `test`.`animals`;
CREATE TABLE  `test`.`animals` (
  `grp` char(30) NOT NULL,
  `id` mediumint(9) NOT NULL AUTO_INCREMENT,
  `name` char(30) NOT NULL,
  PRIMARY KEY (`grp`,`id`)
) ENGINE=MyISAM;

INSERT INTO animals (grp,name) VALUES
    ('mammal','dog'),('mammal','cat'),
    ('bird','penguin'),('fish','lax'),('mammal','whale'),
    ('bird','ostrich');

SELECT * FROM animals ORDER BY grp,id;

Which returns:

+--------+----+---------+
| grp    | id | name    |
+--------+----+---------+
| fish   |  1 | lax     |
| mammal |  1 | dog     |
| mammal |  2 | cat     |
| mammal |  3 | whale   |
| bird   |  1 | penguin |
| bird   |  2 | ostrich |
+--------+----+---------+

2
আপনি যদি প্রাথমিক কী সংজ্ঞাতে স্বতঃবৃদ্ধিযোগ্য কলামটি নির্দিষ্ট করেন তবে এটি কাজ করে। (সম্ভবত এটি পরিবর্তিত হয়েছে, আমি কেবল এটি 5.6 এ পরীক্ষা করেছি)
সিটারকসন

11

(এগুলি অধ্যয়নরত হয়েছে, অনেক)

প্রার্থী কী - একটি সারণী সারি স্বতন্ত্রভাবে সনাক্ত করতে একটি সর্বনিম্ন কলামের সংমিশ্রণ প্রয়োজন।
যৌগিক কী - 2 বা আরও কলাম।

  • একাধিক প্রার্থী কী একটি সারণীতে উপস্থিত থাকতে পারে।
    • প্রাথমিক কী - কেবলমাত্র একটি প্রার্থী কী আমাদের দ্বারা নির্বাচিত
    • বিকল্প কী - অন্যান্য সমস্ত প্রার্থী কী
      • প্রাথমিক কী এবং বিকল্প কী উভয়ই যৌগিক কী হতে পারে

সূত্র:
https://en.wikedia.org/wiki/Superkey
https://en.wikedia.org/wiki/Candidate_key
https://en.wikedia.org/wiki/Primary_key
https://en.wikedia.org / উইকি / Compound_key


6

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

উদাহরণ:

Person(id, name, email, street, zip_code, area)

এর মধ্যে একটি কার্যকরী নির্ভরতা থাকতে পারে id -> name,email, street, zip_code and area তবে প্রায়শই একটি এর zip_codeসাথে যুক্ত হয় areaএবং এর মধ্যে একটি অভ্যন্তরীণ কার্যকরী নির্ভরতা থাকে zip_code -> area

সুতরাং কেউ এটি অন্য টেবিলের মধ্যে বিভক্ত বিবেচনা করতে পারে:

Person(id, name, email, street, zip_code)
Area(zip_code, name)

যাতে এটি তৃতীয় স্বাভাবিক ফর্মের সাথে সামঞ্জস্যপূর্ণ ।


6

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

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

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

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

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

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

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

এই উদাহরণটি বিবেচনা করুন ::

ALTER TABLE Persons
ADD CONSTRAINT pk_PersonID PRIMARY KEY (P_Id,LastName)

যেখানে টিউপলটি " (পি_আইডি, লাস্টনাম) " স্বতন্ত্রতার সীমাবদ্ধতার প্রয়োজন এবং লম্বা ইউনিকোড লাস্টনাম প্লাস 4 বাইট পূর্ণসংখ্যার হতে পারে, সেখানে (1) ঘোষিতভাবে এই সীমাবদ্ধতাটি " ADC CONSTRAINT pk_PersonID UNIQUE NONCUSTERED " হিসাবে প্রয়োগ করা বাঞ্চনীয় হবে would , লাস্টনাম) "এবং (2) পৃথকভাবে একটি ছোট সারোগেট কীটিকে ক্লাস্টারড ইনডেক্সের " প্রাথমিক কী "হিসাবে ঘোষণা করে। এটি লক্ষণীয় যে অনিতা সম্ভবত একটি আবরণ ক্ষেত্র তৈরি করার জন্য কেবল এই সীমাবদ্ধতার সাথে লাস্টনাম যুক্ত করতে ইচ্ছুক, যা একটি ক্লাস্টার ইনডেক্সে অপ্রয়োজনীয় কারণ সমস্ত ক্ষেত্রগুলি এর দ্বারা আচ্ছাদিত।

শারীরিক দিক থেকে "স্টোরেজ ইন লুকিং কী" শব্দের সাথে "পছন্দের প্রাকৃতিক বা প্রার্থী কী" (লজিকাল মডেল থেকে) অর্থ সংঘাতের কারণে এসকিউএল সার্ভারের একটি প্রাথমিক কী অবিবাহিত হিসাবে মনোনীত করার ক্ষমতা একটি দুর্ভাগ্যজনক historicalতিহাসিক পরিস্থিতি is মডেল. আমার বোধগম্যতা হল যে মূলত SYBASE এসকিউএল সার্ভার শারীরিক মডেল থেকে "স্টোরেজটিতে লুকিং কী" হিসাবে গাদা বা ক্লাস্টার ইনডেক্স হিসাবে সর্বদা একটি 4-বাইট রুইআইডি ব্যবহার করে।


3
আপনি কি এটি ইংরেজী অনুবাদ করতে পারেন!
জাসির

3

কিছু লোক "প্রাথমিক কী" শব্দটি ব্যবহার করে হুবহু একটি পূর্ণসংখ্যা কলাম যা কিছু স্বয়ংক্রিয় প্রক্রিয়া দ্বারা এর মান উত্পন্ন করে mean উদাহরণস্বরূপ AUTO_INCREMENT, মাইএসকিউএল বা IDENTITYমাইক্রোসফ্ট এসকিউএল সার্ভারে। আপনি কি এই অর্থে প্রাথমিক কী ব্যবহার করছেন?

যদি তা হয় তবে উত্তরটি আপনি যে ব্র্যান্ডের ডেটাবেস ব্যবহার করছেন তার উপর নির্ভর করে। মাইএসকিউএলে, আপনি এটি করতে পারবেন না, আপনি একটি ত্রুটি পান:

mysql> create table foo (
  id int primary key auto_increment, 
  id2 int auto_increment
);
ERROR 1075 (42000): Incorrect table definition; 
there can be only one auto column and it must be defined as a key

অন্যান্য ব্র্যান্ডের ডেটাবেজে আপনি একটি টেবিলের মধ্যে একাধিক স্বয়ংক্রিয় উত্পাদনকারী কলাম সংজ্ঞায়িত করতে সক্ষম।


5
একাধিক স্বতঃ-উত্পাদক কলামগুলি কী লাভ করবে?
তার্নে কলমেন

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

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

2

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

CREATE t1(
c1 int NOT NULL,
c2 int NOT NULL UNIQUE,
...,
PRIMARY KEY (c1)
);

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


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

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

দেখে মনে হচ্ছে, আপনার ' কী'- এর আসল অর্থ প্রার্থী_কি ( এন
মনোহর রেড্ডি পোরেডি

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

১. আপনি যখন উল্লেখ করেন "যদি আরও কী থাকে তবে সেগুলি সমস্তই প্রার্থী কী", ... আপনি কি অন্যথায় / অন্যথায় বোঝাতে চান, তারা প্রার্থী কী নয়? ... 2. অন্য অংশ কোথায়? ... আমরা কি আদৌ একই পৃষ্ঠা?
মনোহর রেড্ডি পোরেড্ডি

1

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

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

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

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


0

আমার চেয়ে ভাল প্রযুক্তিগত উত্তরগুলি আরও ভালভাবে দেওয়া হয়েছিল। আমি কেবল এই বিষয়টিতে যুক্ত করতে পারি:

আপনি যদি এমন কিছু চান যা অনুমোদিত / গ্রহণযোগ্য নয় তবে এটি পিছনে পদক্ষেপ নেওয়া ভাল কারণ।

  1. কেন এটি গ্রহণযোগ্য নয় এর মূল বিষয়টি বুঝুন।
  2. ডকুমেন্টেশন / জার্নাল নিবন্ধ / ওয়েব এবং আরও খনন
  3. বর্তমান নকশা বিশ্লেষণ / পর্যালোচনা করুন এবং বড় ত্রুটিগুলি চিহ্নিত করুন।
  4. নতুন ডিজাইনের সময় প্রতিটি পদক্ষেপ বিবেচনা করুন এবং পরীক্ষা করুন।
  5. সর্বদা অপেক্ষায় থাকুন এবং অভিযোজক সমাধান তৈরি করার চেষ্টা করুন।

আশা করি এটি কাউকে সাহায্য করবে।


1
জেনেরিক (যদিও দরকারী) পরামর্শ, নির্দিষ্ট প্রশ্নের উত্তর নয়।
ব্র্যাডফোর্ড নিডহ্যাম

-3

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

CREATE TABLE CHAPTER (
    BOOK_ISBN VARCHAR(50) NOT NULL,
    IDX INT NOT NULL,
    TITLE VARCHAR(100) NOT NULL,
    NUM_OF_PAGES INT,
    PRIMARY KEY (BOOK_ISBN, IDX)
);

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