প্রাথমিক কী / বিদেশী কী মিলগুলি যোগদানের জন্য ব্যবহার করা হয় না কেন?


48

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

সম্পাদনা: এটিকে কিছুটা স্পষ্ট করার জন্য:

ধরুন আমার কাছে একটি টেবিল 1 এবং একটি টেবিল 2 রয়েছে। কলাম 1 এ টেবিল 1 এর একটিতে বিদেশী কী রয়েছে, যা টেবিল 2 এর প্রাথমিক কী, কলাম খের উল্লেখ করে। এখন আমি যদি এই টেবিলগুলিতে যোগদান করি তবে আমাকে এরকম কিছু করতে হবে:

SELECT * FROM table1
JOIN table2 ON table1.a = table2.b

যাইহোক, আমি ইতিমধ্যে আমার কীগুলি ব্যবহার করে সংজ্ঞায়িত করেছি যা টেবিল 1.a টেবিল 2.b এর উল্লেখ রয়েছে, সুতরাং আমার কাছে মনে হয় যে কোনও ডিবিএমএস সিস্টেম স্বয়ংক্রিয়ভাবে টেবিল 1.a এবং টেবিল 2.b কে যোগ কলাম হিসাবে ব্যবহার করা শক্ত হওয়া উচিত নয়, যেমন একটি সহজভাবে ব্যবহার করতে পারেন:

SELECT * FROM table1
AUTO JOIN table2

তবে অনেকগুলি ডিবিএমএস এ জাতীয় কিছু বাস্তবায়ন করে না বলে মনে হয়।

উত্তর:


32

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

তবে তীব্র ঘাটতি রয়েছে! যে প্রশ্নগুলি আজ সঠিক, সেগুলি সম্ভবত একই টেবিলে দ্বিতীয় এফকে যুক্ত করে আগামীকাল ত্রুটি হয়ে উঠতে পারে!

আমাকে আবার এটি বলতে দাও: কলাম যুক্ত করে, যেসব কলামগুলি সেই কলামগুলি ব্যবহার করে না সেগুলি 'সঠিক' থেকে 'ত্রুটি'তে পরিণত হতে পারে!

এটি এমন রক্ষণাবেক্ষণের দুঃস্বপ্ন, যে কোনও বুদ্ধিমান স্টাইল গাইড এই বৈশিষ্ট্যটি ব্যবহার করতে নিষেধ করবে। ইতিমধ্যে select *একই কারণে নিষিদ্ধ !

এই সমস্ত গ্রহণযোগ্য হবে, যদি কর্মক্ষমতা বাড়ানো হয়। যাইহোক, এটি ক্ষেত্রে না।

সংক্ষিপ্তসার হিসাবে, এই বৈশিষ্ট্যটি কেবলমাত্র সীমাবদ্ধ সাধারণ ক্ষেত্রে ব্যবহার করা যেতে পারে, কার্যকারিতা বাড়ায় না এবং বেশিরভাগ শৈলীর গাইডগুলি যেভাবেই এর ব্যবহার নিষিদ্ধ করবে।

এজন্য এটি সরবরাহ করা হয় না যে বেশিরভাগ ডাটাবেস বিক্রেতারা আরও গুরুত্বপূর্ণ জিনিসগুলিতে তাদের সময় ব্যয় করতে পছন্দ করে।


1
সম্ভবত একটি সংক্ষিপ্ত পারফরম্যান্স হিট হবে কারণ এতে যোগদানের কলামগুলি স্প্রিফাইটিংয়ের পরিবর্তে তাদের খুঁজে বের করতে হবে।
এইচএলজিইএম

1
@ এইচএলজিইএম, এটি ক্যাশে হতে পারে এবং বৃহত্তর প্রশ্নের জন্যও অপ্রাসঙ্গিক হতে পারে। সুবিধাটি হ'ল আমরা নিশ্চিত হতে পারি যে কিছু মানুষের ত্রুটির কারণে কীগুলি মিস করা হয়নি।
পেসারিয়ার

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

2
অনেক ক্ষেত্রে? এক হাজার টেবিল ডিবিতে, আমার কাছে কেবল দুটি টেবিলের মধ্যে -1-এর বেশি সম্পর্কের কয়েকটি ঘটনা রয়েছে। যাইহোক, এটি কোনও সমস্যা নয়, সম্পর্কের নাম যুক্ত করার পক্ষে এটি যথেষ্ট AUTO JOIN mytable THROUGH myrelationহবে, এটি খুব সুন্দর হবে।
তেজয়

আমরা আমাদের কাস্টম-বিল্ট। নেট এসকিউএল নির্মাতাকে, যেমন ইন্টেলিজেন্স সহ, এটি করিInnerJoin(SRC_TABLE.rDEST_TABLE.REL_NAME_F01)
তেজয়

27

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

  1. একই টেবিলে আপনার একাধিক বিদেশী কী থাকতে পারে। নিম্নলিখিতটি বিবেচনা করুন যেখানে চালানের শুরুর পয়েন্ট এবং শেষের পয়েন্ট থাকে

    table: USA_States
    StateID
    StateName
    
    table: Shipment
    ShipmentID
    PickupStateID Foreign key
    DeliveryStateID Foreign key
    

    আপনি পিকআপের অবস্থার ভিত্তিতে যোগ দিতে চাইতে পারেন। সম্ভবত আপনি বিতরণ স্থিতিতে যোগদান করতে চান। হতে পারে আপনি দুজনেই যোগ দিতে পারেন 2! স্কেল ইঞ্জিনটি আপনার কী তা জানার কোনও উপায় নেই।

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

  3. কিছু বিশেষ ক্ষেত্রে আপনি কলামগুলিতে যোগদান করবেন যেখানে দুটিও অনন্য নয়। সুতরাং those কলামগুলিতে একটি পিকে / এফকে উপস্থিতি অসম্ভব।

  4. আপনি মনে হতে পারে 2 পয়েন্ট এবং 3 উপরে প্রাসঙ্গিক যেহেতু আপনার প্রশ্ন আছে যখন হয় না IS একটি একক পি কে / এফ কে সারণির মধ্যে সম্পর্ক। তবে টেবিলগুলির মধ্যে একক পিকে / এফকে উপস্থিতির অর্থ এই নয় যে আপনি পিকে / এফকে ছাড়াও অন্যান্য ক্ষেত্রগুলি যোগ দিতে পারবেন না। স্কিল ইঞ্জিনটি জানতে পারে না আপনি কোন ক্ষেত্রগুলিতে যোগদান করতে চান।

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

সংক্ষেপে: টেবিলের সাথে যোগ দিয়ে পিকে / এফকে কিছু করার নেই। এগুলি পৃথক সম্পর্কযুক্ত বিষয়। এটি প্রকৃতির একটি দুর্ঘটনা যা আপনি প্রায়শই পিকে / এফকে কলামগুলিতে যোগ দেন।

আপনি কি বর্গক্ষেত্র ইঞ্জিনটি অনুমান করতে চান এটি একটি পূর্ণ, বাম, ডান বা অভ্যন্তরীণ যোগদান করেছে? আমি তাই মনে করি না. যদিও এটি যুক্তিযুক্তভাবে কলামগুলিতে যোগদানের অনুমান করার চেয়ে কম পাপ হবে।


7
আমি বিদেশী কী এবং সাধারণীকরণকে টেবিলের সাথে যোগ দেওয়ার সাথে খুব প্রাসঙ্গিক বলে মনে করি।

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

5
"এটি প্রকৃতির একটি দুর্ঘটনা মাত্র যা আপনি প্রায়শই পিকে / এফকে কলামগুলিতে যোগ দেন" - আমি নিশ্চিত নই!
onedaywhen 16'12 12: 12

2
"স্বাভাবিক?" আমি মনে করি এখানে চিন্তাভাবনাটি হ'ল আপনি যদি 1NF রেভভায়ার দিয়ে শুরু করেন তবে 6NF রিলভারগুলিতে বিভক্ত হয়ে যাওয়ার সম্ভাবনা থাকে ক) তাদের বাস্তবায়নের জন্য বিদেশী চাবি থাকবে এবং খ) তারা প্রায়শই প্রশ্নগুলিতে যোগ দেওয়া হবে।
onedaywhen

4
"পিকে / এফকে টেবিলের সাথে যোগ দিয়ে কিছু করার নেই"
ypercubeᵀᴹ

11

"যোগদানযোগ্যতা" ধারণা। সম্পর্ক r1এবং r2যোগসূত্র হয় এবং যদি একই নামের বৈশিষ্ট্যগুলি একই ধরণের হয় তবে ... এই ধারণাটি কেবল তেমন যোগ দিতেই নয় অন্যান্য বিভিন্ন ক্রিয়াকলাপে [যেমন ইউনিয়ন] তেও প্রযোজ্য।

এসকিউএল এবং রিলেশনাল থিওরি: সিজে ডেট দ্বারা সঠিক এসকিউএল কোড কীভাবে লিখবেন

স্ট্যান্ডার্ড এসকিউএল এর মধ্যে ইতিমধ্যে এরূপ বৈশিষ্ট্য রয়েছে, যা NATURAL JOINমাইএসকিউএলে প্রয়োগ করা হয়েছে।

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


1
প্রাকৃতিক যোগদান এবং সাধারণ কলামগুলিতে যোগদান এফকে-পিকে যোগদানের ধারণার সাথে অরথোগোনাল থেকে পৃথক। (আমার উত্তর দেখুন))
ফিলিপ্সি

@ ফিলিপ্সি: সম্মত, আমি অন্যথায় বোঝানোর ইচ্ছা করি নি। (আপনার একটি দুর্দান্ত উত্তর!)
onedaywhen

9

এসকিউএল প্রথম এসেছিল!

বিদেশী কী এবং বিদেশী কী বাধা পরে এসেছিল এবং মূলত "লেনদেন" শৈলী অ্যাপ্লিকেশনগুলির জন্য একটি অপ্টিমাইজেশন।

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

প্রাসঙ্গিক ডাটাবেসগুলি তখন থেকে অনেক দীর্ঘ এগিয়েছে এবং ট্রানজেকশনাল সিস্টেমগুলির জন্য দৃ the় স্তর হিসাবে প্রাথমিক ব্যবহার সিওডিডি ছিল না। সমস্ত কল্পনা।

তবে এএনএসআই এর সমস্ত বিবাদী লক্ষ্য এবং বিক্রেতাদের রাজনীতির মানসম্পন্ন সংস্থা এসকিউএলের "গাণিতিকভাবে কার্যকর" বৈশিষ্ট্য সংরক্ষণ করার জন্য সর্বদা প্রচেষ্টা করে চলেছে।

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

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


3
ধন্যবাদ, এটি আমার কাছে বোধগম্য! তবে, প্রাকৃতিক যোগদানের একই সমস্যা হয় না? যদিও প্রাকৃতিক যোগদানের এমনকি আরও বড় সমস্যা রয়েছে অনেক DBMS তাদের সমর্থন করে। আইপিও / পিকে / এফ-এর ভিত্তিতে যোগদান একটি প্রাকৃতিক যোগদান সঠিকভাবে সম্পন্ন হবে।

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

6
এসকিউএল আগে আসেনি! রিলেশনাল মডেলটি (যা অবশ্যই বিদেশী কীগুলির ধারণার অন্তর্ভুক্ত ছিল) প্রথমে ১৯ in৯ সালে EFCodd দ্বারা রূপরেখা প্রকাশ করা হয়েছিল। সিক্যেল, তখনকার মতো ১৯ 197৪ সালের দিকে দিনের আলো দেখা যায়নি। এর আবিষ্কারকগণ প্রথম থেকেই পরিষ্কার করে দিয়েছিলেন যে সিকুয়েল / এসকিউএল পূর্ব-বিদ্যমান সম্পর্কের মডেলের উপর ভিত্তি করে তৈরি করা হয়েছিল - যদিও এসকিউএল একটি সত্যিকারের সম্পর্কযুক্ত ভাষা হতে কমেনি।
এনভিজেল

@ এসকিউএলভেল - সত্য! এটি বানানো উচিত "এসকিউএল প্রথমে প্রয়োগ করা হয়েছিল"।
জেমস অ্যান্ডারসন

সিজে ডেট 'অ্যান ইন্ট্রোডাকশন টু ডাটাবেস সিস্টেমস' (পি 276) এ বলে যে কোডড বিদেশী কী ধারণাটি আবিষ্কার করেছিল; কখন বলে না তবে আমি ধরে নিই এটি প্রথম এসকিউএল বাস্তবায়নের আগে ছিল।
onedaywhen

7

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

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

7

আপনি একটি মিথ্যা অনুমান উপর চালিত হতে পারে। আপনি বলছেন 'যতদূর আপনি এটি খুঁজে পেতে পারেন' তবে কোনও অভিজ্ঞতাগত বা প্রজ্ঞাময় প্রমাণ দেবেন না। যদি কোনও প্রশ্নের জন্য পিকে বা এফকে সেরা সূচক হয় তবে এটি ব্যবহৃত হবে। আপনি কেন এটি দেখছেন তা আমি জানি না, তবে আমার অনুমানটি খারাপভাবে তৈরি করা প্রশ্ন।


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

কিছু ক্যোয়ারী সরঞ্জামগুলি আসলে আপনার জন্য একটি অটো জোড় করে তবে আপনাকে যোগদানটি সরিয়ে বা সম্পাদনা করার অনুমতি দেয়। আমি মনে করি এমএস অ্যাক্সেসের কোয়েরি বিল্ডার এটি করে।

সবশেষে এএনএসআইআই স্ট্যান্ডার্ডে বলা হয়েছে যে যোগদান অবশ্যই নির্দিষ্ট করতে হবে। এটি যথেষ্ট অনুমতি দেয় না কারণ।


3
দুঃখিত, সম্ভবত আমি যথেষ্ট পরিষ্কার ছিল না। আমি সূচির কথা বলছি না, আমি যোগদানের কথা বলছি। ধরুন আমার টেবিল 1 এবং টেবিল 2 আছে, টেবিল 1 এএফ (fk) সহ যা টেবিল 2.b তে নির্দেশ করে। আমি যদি এই টেবিলগুলিতে যোগদান করি তবে আমার স্পষ্টভাবে বলতে হবে যে আমি ক এবং এ এবং বি কলামে তাদের সাথে যোগ দিতে চাই (যেমন 'টেবিল 1 তে টেবিল 1 যোগ করুন টেবিল 1 তে টেবিল 1 এ। টেবিল 2.b '), যদিও আমি ইতিমধ্যে আমার ডাটাবেসে সংজ্ঞায়িত করেছি এই দুইটি সম্পর্কিত যে প্রকল্প প্রশ্নটি হল কেন আমি 'নির্বাচন করুন টেবিল 1 যোগ টেবিল 2' থেকে করতে পারবেন না এবং ডিবিএমএসকে fk / pk এর উপর ভিত্তি করে স্বয়ংক্রিয়ভাবে যোগদান কলামগুলি চয়ন করতে দিন।

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

3

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

তবে কোয়েরির নকশার সরঞ্জাম বা পাঠ্য সম্পাদক বিদেশী কীগুলির সাহায্যে যেভাবে কলামের নামে আপনাকে ইন্টেলিজেন্স দেয় সেভাবে কোনওভাবে যোগদান সম্পূর্ণ করতে না পারার কোনও কারণ নেই । আপনি যদি ক্যোয়ারীটি সম্পাদনা করতে পারেন তবে যদি সরঞ্জামটি ভুল হয়ে যায় এবং একটি সম্পূর্ণ সংজ্ঞায়িত ক্যোয়ারী সংরক্ষণ করে। এই জাতীয় সরঞ্জামটি "পিতা বা মাতা" সারণীর নাম এবং বিদেশী কী কলামগুলির পিতা বা মাতা / সন্তানের উভয় ক্ষেত্রে একই নামের কলামগুলির নামকরণের কনভেনশনকে কার্যকরভাবে ব্যবহার করতে পারে etc.

(আমার স্ত্রী এখনও ম্যানেজমেন্ট স্টুডিও এবং এসকিএল সার্ভারের মধ্যে পার্থক্য বুঝতে পারে না এবং ম্যানেজমেন্ট স্টুডিওটি শুরু করার সাথে সাথে এসকিএল সার্ভার শুরু করার বিষয়ে কথা বলে!)


3

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

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

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

কোনও মানব-পঠনযোগ্য বর্ণনা থেকে এসকিউএল কোয়েরি তৈরির জন্য কি থাম্বের কোনও নিয়ম রয়েছে?


2

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

অন্যরা যেমন উল্লেখ করেছে, কিছু বাস্তবায়ন একটি এক্সটেনশন ব্যবহার করে যেখানে যোগদান (কলাম) একটি সাধারণ কলামের নামের উপর ভিত্তি করে দুটি টেবিলের সাথে যোগ দেয় যা কিছুটা অনুরূপ। তবে এটি ব্যাপকভাবে ছড়িয়ে পড়ে না। নোট করুন যে এই এক্সটেনশনটি SELECT * FROM employee NATURAL JOIN department;সিনট্যাক্স থেকে আলাদা যা কোন কলামগুলি ব্যবহার করতে হবে তা নির্দিষ্ট করার কোনও উপায় অন্তর্ভুক্ত করে না। উভয়ই সারণীর মধ্যে সম্পর্কের উপর নির্ভর করবেন না, যা তাদের অবিশ্বাস্য করে তোলে (প্রাকৃতিক যোগদানের সিনট্যাক্সটি এক্সটেনশনের চেয়ে বেশি)।

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


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

1
@ জোনাথনহবস: আমার উত্তরটি একটি সাধারণভাবে নিরপেক্ষ বলে বোঝানো হয়েছিল neutral তবে নিরপেক্ষতা ত্যাগ করা jo সোজার্ডের যুক্তি ত্রুটিযুক্ত table টেবিলের পরিবর্তনগুলি ইতিমধ্যে প্রশ্নগুলি ভাঙছে, একটি সারণীর প্রাথমিক কীতে একটি নতুন কলাম যুক্ত করে প্রশ্নগুলি ভাঙ্গতে বা ভুল ফলাফলগুলি ফেরানো শুরু করবে। এটি প্রকৃতপক্ষে আপনাকে সেই পরিমাণ থেকে উত্তাপিত করবে, যতক্ষণ না টেবিলের সম্পর্ক বজায় থাকবে, কলাম পরিবর্তনগুলি নিরাপদে করা যেতে পারে his এটি সম্ভবত এফকে সম্পর্কের ব্যবহার বাড়িয়ে তুলবে, কারণ এটি আরআই ব্যতীত অন্য কোনও কিছুর জন্য কার্যকর হবে ost হয় পিকে থাকে বা পিকে অন্তর্ভুক্ত করে মাল্টি এফকে হ্যান্ডেল করতে কলামের নাম ব্যবহার করুন।
jmoreno

1

যদি অন দফাটি বাদ দিয়ে রেফারেনশিয়াল অখণ্ডতার ভিত্তিতে ক্ষেত্রগুলি অনুসরণ করে অনুমান করা হয়, আপনি কীভাবে কোনও কার্টেসিয়ান পণ্য করবেন?

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

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


@ জেফো: প্রধান সুবিধাটি হ'ল এটি খুব স্পষ্টভাবে ঘোষণামূলক পদ্ধতিতে অভিপ্রায়টি আরও স্পষ্টভাবে প্রকাশ করেছে। কলামের নামগুলিতে যোগদান করে আপনাকে কলামের কিছু বিষয়বস্তু অন্যের মতো (তবে একই ধরণের নাও হতে পারে) এর সাথে মিল রেখে কিছুই বলবে না। এ, একটি FK সুত্র এ যোগ আপনাকে বলে যে হয় একটি FK সুত্র, কোন কলাম তালিকা অর্থ হবে ছিল সারণির মধ্যে মাত্র 1 FK, অথবা বিপরীতভাবে নেই 1+ (1 এর অধিক সুত্র যখন ঘটে সঙ্গে একটি multicolumn কী বিবেচনা আপনি কলামগুলি c1 = fk1_c1 এবং c2 = fk2_c2) মিশ্রিত করুন। গড়পড়তা বেশি টাইপ করার পরেও এটি ভাল would
jmoreno

(INNER) JOIN ON ছাড়া ব্যবহার করা স্ট্যান্ডার্ড এসকিউএল নয়। কমা, ক্রস যোগ দিন এবং (অভ্যন্তরীণ বা কোনও আউটর) যোগ করুন 0 = 0 কার্টেসিয়ান পণ্যতে ফিরে আসুন।
ফিলিপ্সি

-1

ডাটাবেস কেন বুঝতে পারছে না যে আমি যদি এই টেবিলগুলিতে যোগদান করি তবে আমি তাদের সাথে পিকে / এফকে কলামগুলিতে যোগ দিতে চাই?

কারণগুলির অংশগুলি হ'ল:

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

2 - বিভিন্ন ধরণের যোগদান হয় (বাম, দীর্ঘ, অভ্যন্তরীণ) - অভ্যন্তরীণ যোগদানগুলি তাদের মধ্যে মাত্র 1 is

3 - এসকিউএল স্ট্যান্ডার্ডটি নিম্ন স্তরের ভাষা হওয়ার নীতি দ্বারা পরিচালিত হতে পারে যা উচ্চ স্তরের উপভাষাকে এটি ব্যবহার করে বুদ্ধি তৈরি করতে দেয় form তুলনাটি কিছুটা স্পষ্ট হয় যদি আপনি 4 র্থ প্রজন্মের বনাম 3 য় প্রজন্মের ভাষা মনে করেন। আসলে, আমি যে একটি সরঞ্জাম ব্যবহার করেছি, আইআইএফ আপনাকে এরকম কিছু লেখার অনুমতি দিয়েছে:

ReadEach Customer 
Where Customer Places Orders and That Customer LivesIn "California" 
and OrderValue > 100.00

সংক্ষেপে আপনার পরামর্শ আকর্ষণীয় এবং মানক অংশ হিসাবে বা একটি সঞ্চিত প্রক্রিয়া হিসাবে প্রয়োগ করা যেতে পারে (এটি একটি অভ্যন্তরীণ যোগদানের জন্য ডিফল্ট হবে)।


-10

তিদ্দো, আমি বিশ্বাস করি আপনি সম্পূর্ণরূপে ঠিক আছেন, সেই বিষয়ে এসকিউএল বেশ বোবা , এবং আমার মনে আছে দশ বছর আগে এসকিউএল শেখার সময় আপনি বিদেশী কী সম্পর্কে একই জিনিসটি ভেবেছিলেন।

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

বিদেশী কীগুলি, তাহলে ... মোটেও সহজ নয়। এগুলি রিলেশনাল মডেলের একটি গুরুত্বপূর্ণ ধারণা , ঠিক আছে, তবে একই নামের এসকিউএল বৈশিষ্ট্যটি তুলনা করে না।

: আপনি সরাসরি বলুন নামক যে SQL বৈশিষ্ট্যটি ব্যবহার করবেন না Foreign Keyএ সব , যতক্ষণ না আপনি কর্মক্ষমতা সমস্যার সঙ্গে কিছু বড় সিস্টেম আঘাত। স্পষ্টভাবে ইঞ্জিন কহন যা ক্ষেত্র একটি বিদেশী চাবিকাঠি এবং যা করা হয় না হয় শুধুমাত্র ইন্ডেক্স জন্য ব্যবহৃত, এবং এটা ডিবি ব্যবহারকারী অদৃশ্য হবে।

এটা কি বিভ্রান্তিকর?
হ্যাঁ.

৩০ বছরের লোককে বিভ্রান্ত করার পরে কি তারা এখন এটিকে আরও শক্তিশালী করে তুলবে?
কোন সুযোগ নেই.

প্রয়োজনীয় না হওয়া পর্যন্ত বিদেশী কীগুলি পুরোপুরি উপেক্ষা করছেন ... আমার জন্য এসকিউএল স্থির করবেন?
হ্যাঁ!

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

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


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

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