কেন একাধিক কলামগুলিকে প্রাথমিক কী হিসাবে ব্যবহার করবেন (সম্মিলিত প্রাথমিক কী)


109

এই উদাহরণটি ডাব্লু 3 স্কুল থেকে নেওয়া হয়েছে

CREATE TABLE Persons
(
    P_Id int NOT NULL,
    LastName varchar(255) NOT NULL,
    FirstName varchar(255),
    Address varchar(255),
    City varchar(255),
    CONSTRAINT pk_PersonID PRIMARY KEY (P_Id,LastName)
)

আমার উপলব্ধি হ'ল উভয় কলাম একসাথে ( P_Idএবং LastName) সারণির জন্য একটি প্রাথমিক কী উপস্থাপন করে Persons। এটা কি সঠিক?

  • কেন কেউ একক কলামের পরিবর্তে প্রাথমিক কী হিসাবে একাধিক কলামগুলি ব্যবহার করতে চান?
  • প্রদত্ত টেবিলে প্রাথমিক কী হিসাবে কয়টি কলামগুলি একসাথে ব্যবহার করা যেতে পারে?


1
@ মার্তিজন পিটারস উত্তরটি মোছা হয়েছে কেন?
পারফরম্যান্সডিবিএ

উত্তর:


119

আপনার বোঝাপড়াটি সঠিক।

আপনি অনেক ক্ষেত্রে এটি করতে হবে। একটা উদাহরণ মত একটা সম্পর্ক আছে OrderHeaderএবং OrderDetail। পিকে ইন OrderHeaderহতে পারে OrderNumber। পি কে মধ্যে OrderDetailহতে পারে OrderNumberএবং LineNumber। এটি যদি এই দুজনের মধ্যে হয় তবে এটি অনন্য হবে না তবে দুটির সংমিশ্রণটি অনন্যরূপে নিশ্চিত।

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


2
আমি যদি ব্রাঞ্চ_আইডি ব্যবহার করছি এবং দুটি ডাটাবেসের মধ্যে প্রতিলিপি ব্যবহার করছি, আইডির সদৃশ সমাধান হবে তবে এটি কি কার্যকর? !!
Mhmd

11
মনে রাখবেন যে উত্পাদিত প্রাথমিক কী ব্যবহার করার ক্ষেত্রে আপনি প্রায়শই সম্মিলিত মানগুলিতে একটি অনন্য কী চান।
বেকন বিটস

দয়া করে বিশদটি বর্ণনা করুন "কিছু লোকেরা একটি উপায়ে পছন্দ করেন; কেউ কেউ অন্যভাবে পছন্দ করেন"।
ব্যবহারকারীর নাম

1
প্লিজ বিস্তারিত? কি বলব ভেবে পাচ্ছিনা. আমি এমন লোকদের চিনি যারা একাধিক সংক্ষিপ্ত ক্ষেত্রকে কী হিসাবে পছন্দ করেন কারণ তারা স্বতঃস্ফূর্তভাবে কী দেখছে তা বোঝার জন্য স্বজ্ঞাতভাবে সহজ। আমি অন্যদেরকে জানি যারা প্রতিটি সারিতে কেবল একটি অনন্য কী নির্ধারণ করতে পছন্দ করে কারণ এটি টাইপ করা সহজ এবং দ্রুত quick তুমি কি তাই জিজ্ঞাসা করছ?
এমজেবি

এই বার্তাটি ব্যবহারকারীর নাম হিসাবে বোঝানো হয়েছিল। আমি এটি পরিচালনা করতে ভুলে গেছি।
এমজেবি

26

যৌগিক প্রাথমিক কীগুলির আর একটি উদাহরণ হ'ল অ্যাসোসিয়েশন টেবিলের ব্যবহার। মনে করুন আপনার কাছে এমন একটি ব্যক্তির টেবিল রয়েছে যাতে একটি সংখ্যক লোক এবং একটি গ্রুপ সারণি রয়েছে যা একটি গোষ্ঠীর একটি সেট রয়েছে। এখন আপনি ব্যক্তি এবং গোষ্ঠীতে অনেকের সাথে অনেকগুলি সম্পর্ক তৈরি করতে চান। অর্থ প্রতিটি ব্যক্তি অনেক গ্রুপে থাকতে পারে। যৌগিক প্রাথমিক কীটি ব্যবহার করে টেবিলের কাঠামোটি দেখতে কেমন হবে তা এখানে।

Create Table Person(
PersonID int Not Null,
FirstName varchar(50),
LastName varchar(50),
Constraint PK_Person PRIMARY KEY (PersonID))

Create Table Group (
GroupId int Not Null,
GroupName varchar(50),
Constraint PK_Group PRIMARY KEY (GroupId))

Create Table GroupMember (
GroupId int Not Null,
PersonId int Not Null,
CONSTRAINT FK_GroupMember_Group FOREIGN KEY (GroupId) References Group(GroupId),
CONSTRAINT FK_GroupMember_Person FOREIGN KEY (PersonId) References Person(PersonId),
CONSTRAINT PK_GroupMember PRIMARY KEY (GroupId, PersonID))

দুর্দান্ত ব্যাখ্যা: আমি মনে করি এম-টু-এন সম্পর্কের জন্য বৈশিষ্ট্যগুলির প্রয়োজন (একটি সাধারণ ক্রশে) মূল বিষয়।
নেকড়ে

হয়তো সামান্য বেনিফিট ব্যাখ্যা যুক্ত করুন আরও ভাল হতে পারে
মার্টিয়ান2049

10

ডাব্লু 3 স্কুলগুলির উদাহরণটি বলছে না যে আপনি যখন যৌগিক প্রাথমিক কীগুলি ব্যবহার করবেন এবং কেবল অন্য কী হিসাবে একই উদাহরণ টেবিলটি ব্যবহার করে উদাহরণ বাক্য গঠন দিচ্ছেন।

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

1234     Jobs
1234     Gates

আরও পঠন: দুর্দান্ত প্রাথমিক-কী বিতর্ক বা কেবল গুগল meaningless primary keysবা এমনকি এটি উপলব্ধি করা এসও প্রশ্নটি

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


1
1) "দুর্দান্ত প্রাথমিক কী বিতর্ক" লিঙ্কটি বিশেষত বোকা, তথ্যটি স্ব-পরিবেশন এবং মিথ্যা। 2) সারিটি অনন্য করে তোলে কলামগুলির সূচি এড়ানো যায় না। সূচকের সাথে একটি "সারোগেট" আইডি সর্বদা অতিরিক্ত কলাম এবং অতিরিক্ত সূচক হয়। বরং নির্বোধ কারণ এটি অনর্থক। এবং ধীর।
পারফরম্যান্সডিবিএ

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

4

আপনি যখনই কয়েকটি বৈশিষ্ট্যের সংমিশ্রণের স্বতন্ত্রতা নিশ্চিত করতে চান তখন আপনি একটি যৌগিক কী (একাধিক বৈশিষ্ট্যের একটি কী) ব্যবহার করেন। একটি একক বৈশিষ্ট্য কী একই জিনিস অর্জন করতে পারে না।


1
একটি অনন্য কী নিশ্চিত করার জন্য, আপনি দুটি কীবতীয় সংশ্লেষের উপর নির্ভর করে একটি কী তৈরি করতে পারেন যা যৌক্তিকভাবে নকল করা যায় না, বৃহত্তর ডেটাসেট থেকে ব্যক্তি এবং স্নাতক তারিখের উদাহরণ হতে পারে।
জন মার্ক

3

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


3

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


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

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

3

আপনার দ্বিতীয় প্রশ্ন

প্রদত্ত টেবিলে প্রাথমিক কী হিসাবে কয়টি কলামগুলি একসাথে ব্যবহার করা যেতে পারে?

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

আপনি যদি সুস্পষ্ট তথ্য না খুঁজে পান তবে সীমা লঙ্ঘনের (যা প্রত্যাশিত হওয়া উচিত) স্থিতিশীল (এবং নির্দিষ্ট) হ্যান্ডলিংয়ের আশা করতে পারেন তা নিশ্চিত করার জন্য একটি পরীক্ষা ডেটাবেস তৈরির চেষ্টা করুন। এ সম্পর্কে সঠিক তথ্য পেতে সাবধান হন: কখনও কখনও সীমাবদ্ধতা জমে থাকে এবং আপনি বিভিন্ন ডাটাবেস বিন্যাসের সাথে বিভিন্ন ফলাফল দেখতে পাবেন।



2

আপনি যখন কোনও সম্পর্কযুক্ত ডাটাবেসে একটি মধ্যবর্তী টেবিল ব্যবহার করেন তখন একাধিক টেবিলগুলিতে একটি প্রাথমিক কী ব্যবহার করা কার্যকর হয়।

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

দ্বিতীয় সারণীর নাম ছিল "অক্ষর" - তাদের নাম এবং একটি সংক্ষিপ্ত বিবরণ। প্রাথমিক কীটি "চারনাম" এ ছিল।

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


1

আমরা একক রেকর্ড রচনা করে যা স্বতন্ত্র কলাম মানগুলি গ্যারান্টি দিতে সম্মিলিত প্রাথমিক কী তৈরি করি। এটি এমন একটি প্রতিবন্ধকতা যা ডেটা সন্নিবেশ রোধ করতে সহায়তা করে যা অনুলিপি করা উচিত নয়।

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

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