সত্তা সম্পর্ক সমস্যা


19

আমার সাথে সম্পর্কিত 4 ​​টি টেবিল রয়েছে (এটি একটি উদাহরণ):

Company:
ID
Name
CNPJ

Department:
ID
Name
Code
ID_Company 

Classification:
ID
Name
Code
ID_Company

Workers:
Id 
Name
Code
ID_Classification
ID_Department

ধরুন যে, আমি একজন আছে classificationসঙ্গে id = 20, id_company = 1। আর departmentআছে id_company = 2(যে অন্য কোনো কোম্পানি প্রতিনিধিত্ব করে)।

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


1
'শ্রেণিবিন্যাস' কী?
জেহাদ কেরিয়াকি

1
আমি অনুমান করব classificationপজিশনের সাথে যেমন সেক্রেটারি, দারোয়ান, আধ্যাত্মিক ইত্যাদি,
এরিক

আপনি কি শ্রেণিবদ্ধকরণের মতো কোনও কর্মীকে অবশ্যই একই বিভাগের অন্তর্ভুক্ত করতে বাধ্য করতে চান?
লেনার্ট

সম্ভবত ডিপার্টমেন্ট, ক্লাসিফিকেশন (এবং এমনকি কর্মী) সমস্ত কোম্পানির উপর নির্ভর করে দুর্বল সত্তা হিসাবে দেখা উচিত। তারপরে কোম্পানির কীটি বিভাগ, শ্রেণিবদ্ধকরণ এবং কর্মী কীগুলির অংশ হবে। একটি দুর্বল সত্তা এমন একটি সত্তা যার অস্তিত্ব অন্য সত্তার অস্তিত্বের উপর নির্ভর করে।
चमत्कार 173

উত্তর:


9

আপনার ইস্যুটি আপনার মডেল থেকে একটি সত্তা টাইপ অনুপস্থিত থেকে আসে। নিম্নলিখিত ERD বিবেচনা করুন:

ইআরডি

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

POSITIONসুস্পষ্ট সত্তা হিসাবে আপনার মডেলটিতে যুক্ত হওয়ার কয়েকটি সুবিধা রয়েছে।

  1. এটি WORKERসম্ভাব্যভাবে বিভিন্ন সংস্থায় বিভাগ এবং শ্রেণিবিন্যাসে নির্ধারিত হওয়ার বিষয়ে আপনি যে সমস্যাটি নিয়ে উদ্বিগ্ন তা এড়ায়।
  2. এটি আপনাকে অন্যান্য পূর্বাভাসের জন্য একটি লোকস দেয় যা কোনও পদের ক্ষেত্রে প্রযোজ্য হতে পারে, যেমন বেতনের গ্রেড ইত্যাদি to
  3. এটি আপনাকে অবস্থানটি উপস্থিত থাকার সত্যতা রেকর্ড করতে দেয়, যদিও WORKERপজিশনে বর্তমানে কোনও উপস্থিতি নেই , যা সম্ভবত সম্ভবত দরকারী তথ্য।

মনে রাখবেন, যে অবস্থানের সমস্যা এড়ানোর একটি ডিপার্টমেন্ট এবং একটি শ্রেণীবিন্যাস যে বিভিন্ন কোম্পানিতে তাদের জন্য নির্ধারিত হচ্ছে, আমি উভয় কি প্রসারিত করেছি DEPARTMENTএবং CLASSIFICATIONযা কারণে টড এভারেট এর উত্তরে দৈর্ঘ্য এ আপনার সম্পর্কে পড়তে পারেন জন্য ভাল।

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


24

সম্পর্কগুলির সাথে আপনার কোনও সমস্যা আছে বলে আমি মনে করি না। আমি মনে করি পরিবর্তে সমস্যাটি হ'ল প্রতিটি টেবিলের জন্য সার্গেট কীগুলি (অর্থাত্ আইডি) ব্যবহার করে ফলাফল ডেটাবেস ওয়ার্কার্সকে whoseোকানো থেকে বিরত করতে পারে না যার বিভাগ একটি কোম্পানির এবং শ্রেণিবিন্যাস অন্যটির থেকে বিপরীতে। এটি বোঝার একটি ভাল উপায় হ'ল ইআর ডায়াগ্রামিং সরঞ্জামটি ব্যবহার করে স্কিমাটি কল্পনা করা। আমি ওরাকল ডেটা মডেলার সরঞ্জামটি ব্যবহার করব যা একটি ফ্রি ডাউনলোড।

ইআর ডায়াগ্রাম

এখানে চিত্র বর্ণনা লিখুন

এটি যেমন দাঁড়িয়েছে, আপনার 2 টি সংস্থা থাকতে পারে - বলুন IBMএবং MicrosoftIBMবিভাগ থাকতে পারে Software Developmentএবং মাইক্রোসফ্টের একটি Desktop Softwareবিভাগ থাকতে পারে। আইবিএমের একটি Software Engineerশ্রেণিবিন্যাস থাকতে পারে এবং মাইক্রোসফ্টের একটি Software Developerশ্রেণিবিন্যাস থাকতে পারে। এখন, কারণ আপনার জন্য একটি ভাড়াটে কী আছে Departmentএবং Classificationযে, আসলে Software Developmentএকটি হয় IBMবিভাগের এবং Desktop Softwareএকটি হয় Microsoftবিভাগের ভবিষ্যৎ সন্তানের সম্পর্ক হারিয়ে গেছে। এই ক্ষেত্রেও এটি হয় Classification। সুতরাং দুর্ঘটনাক্রমে নির্ধারিত হওয়া সহজ Harlan Mills, বিভাগের একজন IBMকর্মচারী কে Software Development, এর একটি শ্রেণিবিন্যাস Software DeveloperMicrosoftশ্রেণীবিন্যাস! তেমনিভাবে, কর্মীকে সঠিক শ্রেণিবদ্ধকরণ এবং ভুল বিভাগ দেওয়া যেতে পারে! এখানে প্রথম চিত্র দেখানো একটি চিত্র রয়েছে:

এখানে চিত্র বর্ণনা লিখুন

1 টি আইডি উপস্থাপন করে IBMএবং 2 টি আইডি উপস্থাপন করে Microsoft। আমি লাল দৃশ্যকল্প মধ্যে হাইলাইট করেছি যেখানে Harlan Millsএবং Bill Gatesভুল বিভাগ, যা 10 বিভাগের 200 শ্রেণীবিন্যাস আইডি এবং তদ্বিপরীত যুক্ত Id দ্বারা ভিজ্যুয়ালাইজ করা হয় হস্তান্তর করা হয়েছে।

সমাধানের বিকল্পসমূহ

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

দ্বিতীয় বিকল্পটি হ'ল প্রতিটি টেবিলের জন্য সারোগেট কীগুলি ব্যবহার না করা । পরিবর্তে, কেবল Companyটেবিলের জন্য সরোগেট কীগুলি ব্যবহার করুন , এটি মৌলিক এবং এর কোনও বাবা-মা নেই এবং তারপরে এবং শিশু টেবিলগুলির সাথে সনাক্তকারী সম্পর্ক তৈরি করুন। এবং টেবিল এখন একটি পি কে আছে প্লাস একটি সিকোয়েন্স নম্বর বা নাম সেগুলির পার্থক্য নির্ণয় করার। তারপর, থেকে সম্পর্ক এবং করতে আরো পরিণত এবং এইভাবে এর পি কে হয়ে , প্লাস (আমি এই উদাহরণে একটি ক্রম সংখ্যা ব্যবহার করছি), প্লাস । ফলাফল কেবল টেবিলের মধ্যে রয়েছে। এখন এটি নির্ধারণ করা অসম্ভবDepartmentClassificationDepartmentClassificationCompany IdDepartmentClassificationWorkeridentifyingWorkerCompany IdDepartment NumberClassification Numberone Company IdWorkerWorkerএকটি থেকে Departmentএক Companyএবং একটি টু Classificationঅন্য Company

কেন এটা অসম্ভব? এটি অসম্ভব কারণ স্কিমা Workerএবং Departmentএবং এর মধ্যে উল্লেখযোগ্য অখণ্ডতা প্রয়োগ করে Classification। যদি একটিতে এবং অন্যটির Workerজন্য একটি সন্নিবেশ করার চেষ্টা করা হয় তবে সংশ্লিষ্ট প্যারেন্ট টেবিলের মধ্যে যে সংমিশ্রণটি বিদ্যমান নেই তা একটি রেফারেন্সিয়াল অখণ্ডতা লঙ্ঘন ঘটায় এবং সন্নিবেশটি কাজ করবে না।DepartmentCompanyClassification

দ্বিতীয় বিকল্পটির প্রয়োগের একটি আপডেট চিত্র এখানে রয়েছে: এখানে চিত্র বর্ণনা লিখুন

পছন্দসই বিকল্প

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

এটি একটি দুর্দান্ত প্রশ্ন কারণ এটি কেবল দেখায় যে কেবল প্রতিটি টেবিলকে একটি সারোগেট কী প্রয়োজন বলে ধরে নেওয়া কেন একটি খারাপ ধারণা। ফ্যাবিয়ান পাসকালের কেবলমাত্র এই বিষয়টিতে একটি দুর্দান্ত ব্লগ পোস্ট রয়েছে যা দেখায় যে কেবলমাত্র কোনও সার্গেট কী-ই ডেটা অখণ্ডতার দিক থেকে খারাপ ধারণা হতে পারে না ফলে এটি কিছু পুনরুদ্ধারকে ধীর করে তুলতে পারেশারীরিক স্তরে স্পষ্টভাবে কারণ যোগদানের প্রয়োজন হয় যে, কীগুলি সঠিকভাবে ক্যাসকেড করা হত অপ্রয়োজনীয়। এই প্রশ্নটি প্রকাশ করে এমন আরও একটি আকর্ষণীয় বিষয় হ'ল কোনও ডাটাবেস এটি নিশ্চিত করতে পারে না যে এতে প্রবেশ করা সমস্ত ডেটা বাস্তব বিশ্বের ক্ষেত্রে যথাযথ। পরিবর্তে, এটি কেবলমাত্র নিশ্চিত করতে পারে যে এতে প্রবেশ করা ডেটা এটি ঘোষিত নিয়মের সাথে সামঞ্জস্যপূর্ণ। এই ক্ষেত্রে আমরা ক্যাসকেডিং কী পদ্ধতির ব্যবহার করে সম্ভাব্য সর্বোত্তম করতে পারি না তা নিশ্চিত DBMS ডেটা আছে যা একটি নিয়ম সম্মান সঙ্গে সামঞ্জস্যপূর্ণ রাখতে পারবেন না Workerএকটি প্রদত্ত এর Companyচাহিদা একটি সংযুক্ত করার উদ্দেশ্যে প্রয়োজনীয় Classificationএবং Departmentযে একই Company। তবে, যদি সত্যিকারের বিশ্বে Microsoftএকটি বিভাগ বলা হয় Desktop Softwareতবে ডাটাবেসের ব্যবহারকারীর দাবী ডিপার্টমেন্টের পরিবর্তে হয়Software Development এটি একটি সত্য ঘটনা দেওয়া হয়েছে বলে ধরে নেওয়া ছাড়া ডিবিএমএস কিছুই করতে পারে না।


1

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


1

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

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

আজকাল, চৌকস দৃষ্টিভঙ্গি যেমন প্রযুক্তিগত দৃষ্টিভঙ্গি এবং সূচিগুলিতে যোগদানের মতো প্রযুক্তি রয়েছে, সুতরাং আপনার সমস্যাটি যদি কোয়েরির পারফরম্যান্স হয় তবে সেগুলি ব্যবহার করুন।

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