এক থেকে শূন্য বা এসকিউএল-তে একটি সম্পর্ক কার্যকর করা


11

আমাদের বলুন যে আমি এমন একটি দৃশ্যের জন্য একটি ডেটাবেস ডিজাইন করছি যেখানে সেখানে এক থেকে শূন্য বা একের (1-0..1) সম্পর্ক রয়েছে। উদাহরণ স্বরূপ:

  • ব্যবহারকারীর একটি সেট রয়েছে এবং কিছু ব্যবহারকারী গ্রাহকও হতে পারেন ।

সুতরাং, আমি দুটি অনুরূপ সারণী তৈরি করেছি, usersএবং customers, কিন্তু…

… প্রদত্ত এসকিউএল প্ল্যাটফর্মে এই পরিস্থিতিকে উপস্থাপন ও বাস্তবায়নের সর্বোত্তম উপায় কী? আমি দুটি সম্ভাব্য সমাধান বিবেচনা করেছি:

  1. ইন usersটেবিল যোগ, customerকলামে হয় একটি বিদেশী কী রেফারেন্স হতে পারে customersঅথবা একটি NULLচিহ্ন।

  2. ইন customersটেবিল, একটা অন্তর্ভুক্ত userকলাম (ক সঙ্গে সেট UNIQUEযা পয়েন্ট বাধ্যতা) usersটেবিল।

আমি ইতিমধ্যে কিছু ফোরামে অনুরূপ প্রশ্ন জিজ্ঞাসা করেছি, তবে উত্তরটি ছিল মূলত "আপনার যা প্রয়োজন", "আপনি যেটাকে সুবিধাজনক মনে করেন"। আমি এই জাতীয় উত্তর পছন্দ করি না। আমি পরিবর্তে ডিবি তত্ত্বের একটি গুরুতর অংশ চাই, একটি সুপ্রতিষ্ঠিত উত্তর। 1-0..1 সম্পর্ক সম্পর্কে আমি কোথায় পড়তে পারি?

উত্তর:


10

আমি ডিবি তত্ত্বের একটি গুরুতর অংশ চাই

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

আমি মনে করি আপনার বিকল্প 2টি তাত্ত্বিকভাবে সাবলীল কারণ পরিবর্তিত বিকল্প 1 এর বিপরীতে সম্পর্কগুলি ষষ্ঠ স্বাভাবিক ফর্মের (6NF) হতে পারে, এটি একটি প্রক্ষেপণ-যোগ স্বাভাবিক ফর্ম এবং সর্বাধিক স্বাভাবিক ফর্মটি অর্জনযোগ্য।

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


2

আপনাকে আংশিকভাবে সঠিক উত্তর দেওয়া হয়েছে। আসল উত্তরটি আপনার ডেটা মডেল এবং এটি কীভাবে সাধারণী হয়েছে তা থেকে আসে। কীভাবে আপনি সম্পর্কের দিকে যাবেন তা একটি কী:

  • customersটেবিল জন্য বিবেচনা ক্ষেত্র একটি সংখ্যা নিয়ে গঠিত usersটেবিল যা গ্রাহকের ধারণা অন্তর্গত, এবং যদি না ব্যবহারকারীকে একটি গ্রাহক (ব্যবহারকারী উপ-টাইপ) হল নাল হয়। এই ক্ষেত্রে customersসারণীটি টেবিল থেকে প্রাথমিক কী উত্তরাধিকার সূত্রে প্রাপ্ত হয় users। (একাধিক উপ-প্রকারের পক্ষে এটি ওভারল্যাপ হতে পারে এবং নাও সম্ভব))

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

আপনার যেটি রয়েছে তা অনেকগুলি সম্পর্কের ক্ষেত্রে alচ্ছিক একটি বিশেষ ক্ষেত্রে যেখানে উপরের সীমানাটি রয়েছে। এটি উভয় পক্ষ থেকে বিবেচনা করুন: একাধিক গ্রাহক, বা এক গ্রাহকের একাধিক ব্যবহারকারীর পক্ষে থাকা কি সম্ভব হবে? যদি তা হয় তবে আপনার ডেটা পুনরায় তৈরি করতে হবে।

যোগ করা হচ্ছে user-idবিদেশী কী customersটেবিল একটি ভাল পছন্দ বিবেচনা করা যেতে পারে যেমন সঠিকভাবে অনেক (সর্বোচ্চ সীমা 1) সম্পর্ক এক মানচিত্র এবং একটি nullable ক্ষেত্র এড়াতে। উপরের সীমাটি প্রয়োগ করতে বিদেশী কী সূচকটি অনন্য হওয়া দরকার। প্রাথমিক কীটি হ'লে এটি স্বয়ংক্রিয়ভাবে ঘটবে user-id

টেবিলটিতে alচ্ছিক customer-idবিদেশী কী হিসাবে যুক্ত করা usersসম্পর্কের ক্ষেত্রে 1 এর উপরের সীমাটি প্রয়োগ করে তবে নির্ভরতা বিপরীত করে।


1

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

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