আমি কীভাবে এসকিউএল তে একটি যৌগিক প্রাথমিক কী সংজ্ঞায়িত করতে পারি?


112

এসকিউএল-তে দুটি ক্ষেত্র সমন্বিত একটি সমন্বিত প্রাথমিক কী কীভাবে সংজ্ঞায়িত করতে পারি?

আমি টেবিল এবং সবকিছু তৈরি করতে পিএইচপি ব্যবহার করছি। আমি একটি সারণী নাম করতে চাই votingক্ষেত্রের সাথে QuestionID, MemeberIDএবং vote। এবং যৌগিক প্রাথমিক কী ক্ষেত্রগুলি QuestionIDএবং নিয়ে গঠিত MemberID

আমি এই কিভাবে করা উচিত?


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

উত্তর:


229

কেবল স্পষ্টতার জন্য: একটি টেবিলের সর্বাধিক একটি প্রাথমিক কী থাকতে পারে। একটি প্রাথমিক কীতে এক বা একাধিক কলাম থাকে (সেই টেবিল থেকে)। যদি একটি প্রাথমিক কী দুটি বা ততোধিক কলাম ধারণ করে তবে এটিকে সম্মিলিত প্রাথমিক কী বলে । এটা অনুসরণ হিসাবে সংজ্ঞায়িত করা হয়:

CREATE TABLE voting (
  QuestionID NUMERIC,
  MemberID NUMERIC,
  PRIMARY KEY (QuestionID, MemberID)
);

জোড় (প্রশ্নআইডি, মেম্বারআইডি) এর পরে অবশ্যই টেবিলের জন্য অনন্য হওয়া উচিত এবং কোনও মানই NULL হতে পারে না। আপনি যদি এই জাতীয় কোনও জিজ্ঞাসা করেন:

SELECT * FROM voting WHERE QuestionID = 7

এটি প্রাথমিক কী এর সূচক ব্যবহার করবে। তবে আপনি যদি এটি করেন:

SELECT * FROM voting WHERE MemberID = 7

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

প্রয়োজনে অন্যটিতে একটি সূচক যুক্ত করুন:

CREATE UNIQUE INDEX idx1 ON voting (MemberID, QuestionID);

5
ভাল উত্তর. কেবল পরিষ্কার করার জন্য, প্রশ্নআইডি এবং মেম্বারআইডি পৃথক প্রাথমিক কী নয় বরং তাদের সংমিশ্রণটি একটি অনন্য যুগল / টুপল গঠন করে।
পিটার

5
ন্যায়বিচারের (MemberID, QuestionID)বিপরীতে সূচক যুক্ত করার কোনও সুবিধা আছে কি MemberID? যতদূর আমি বুঝতে পেরেছি, সাথে নির্বাচন করার সময় আপনি সূচিকৃত অনুসন্ধান পাবেন QuestionIdএবং এছাড়াও (QuestionId, MemeberId), কেবলমাত্র একমাত্র অনুপস্থিত হবে MemberId
সোয়াগল

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

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

6
CREATE TABLE `voting` (
  `QuestionID` int(10) unsigned NOT NULL,
  `MemberId` int(10) unsigned NOT NULL,
  `vote` int(10) unsigned NOT NULL,
  PRIMARY KEY  (`QuestionID`,`MemberId`)
);
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.