সফটওয়্যার ডেভেলপমেন্ট লাইফ সাইকেল (SDLC) পর্যায় ও অংশসমূহ HRM and Payroll Project

⌘K
  1. Home
  2. সফটওয়্যার ডেভেলপমেন্ট লা...
  3. 4. ডাটাবেজ ডিজাইন (Databa...
  4. ধাপ ৩: ডেটাবেজ ডিজাইন পার...
  5. 03. কর্মী ব্যবস্থাপনা (Employee Management)

03. কর্মী ব্যবস্থাপনা (Employee Management)

আপনার কর্মী ব্যবস্থাপনা (Employee Management) মডিউলের জন্য একটি মাল্টি-কোম্পানি ভিত্তিক এবং ফিচার সমৃদ্ধ ডেটাবেজ ডিজাইন এখানে প্রস্তাব করা হলো। এই ডিজাইনে প্রতিটি কর্মীর রেকর্ড একটি নির্দিষ্ট কোম্পানির সাথে সংযুক্ত থাকবে, এবং এতে অতিরিক্ত বিভিন্ন ফিচার যুক্ত থাকবে যা কর্মী ব্যবস্থাপনাকে আরও কার্যকর এবং তথ্যবহুল করবে।


Employee Management Database Design

প্রধান টেবিলসমূহ এবং ফিল্ড

  1. employees (প্রধান টেবিল, যেখানে কর্মীর মূল তথ্য থাকবে)
  2. employee_contact_details (কর্মীর যোগাযোগ সম্পর্কিত তথ্য)
  3. employee_emergency_contacts (জরুরি যোগাযোগের তথ্য)
  4. employee_job_details (কর্মীর পদের বিবরণ, যোগদানের তারিখ, এবং কাজের স্থান)
  5. employee_salary_details (কর্মীর বেতন সম্পর্কিত তথ্য)
  6. employee_documents (কর্মীর নথি সংরক্ষণ)
  7. employee_dependents (কর্মীর নির্ভরশীল ব্যক্তির তথ্য)
  8. employee_bank_details (কর্মীর ব্যাংক তথ্য)
  9. employee_work_history (কর্মীর পূর্ববর্তী চাকরির তথ্য)
  10. employee_status_log (কর্মীর কর্মসংস্থান অবস্থা পরিবর্তন লগ)

1. employees

Field NameData TypeDescription
employee_idINT (PK)কর্মীর আইডি (প্রাথমিক কী)
company_idINT (FK)কোম্পানির আইডি (যার সাথে কর্মী যুক্ত)
first_nameVARCHAR(50)কর্মীর প্রথম নাম
last_nameVARCHAR(50)কর্মীর শেষ নাম
genderENUMলিঙ্গ (Male, Female, Other)
date_of_birthDATEজন্ম তারিখ
marital_statusENUMবৈবাহিক অবস্থা (Single, Married, etc.)
nationalityVARCHAR(50)জাতীয়তা
employee_codeVARCHAR(20)কর্মীর কোড (ইউনিক আইডেন্টিফায়ার)
employment_typeENUMচাকরির ধরণ (Permanent, Contract, etc.)
created_atTIMESTAMPতৈরি করার তারিখ
updated_atTIMESTAMPআপডেট করার তারিখ
statusENUMকর্মী অবস্থা (Active, Inactive, Terminated)

রিলেশন: employees টেবিলের company_id ফিল্ডটি Company টেবিলের সাথে সংযুক্ত থাকবে, যা নিশ্চিত করবে যে প্রতিটি কর্মী একটি নির্দিষ্ট কোম্পানির অধীনে রয়েছে। এই টেবিলটি Employee Management মডিউলের প্রধান টেবিল হিসেবে কাজ করবে, এবং বাকি টেবিলগুলো employee_id ফিল্ডের মাধ্যমে এই টেবিলের সাথে সম্পর্কিত থাকবে।

2. employee_contact_details

Field NameData TypeDescription
contact_idINT (PK)যোগাযোগ তথ্যের আইডি
employee_idINT (FK)কর্মীর আইডি
phone_numberVARCHAR(15)কর্মীর ফোন নম্বর
emailVARCHAR(100)কর্মীর ইমেইল
addressTEXTঠিকানা
cityVARCHAR(50)শহর
stateVARCHAR(50)রাজ্য
postal_codeVARCHAR(10)পিন কোড
countryVARCHAR(50)দেশ
created_atTIMESTAMPতৈরি করার তারিখ
updated_atTIMESTAMPআপডেট করার তারিখ
রিলেশন: employee_contact_details টেবিলের employee_id ফিল্ডটি employees টেবিলের সাথে সংযুক্ত থাকবে, যা নিশ্চিত করবে যে প্রতিটি যোগাযোগের তথ্য সঠিক কর্মীর সাথে সম্পর্কিত রয়েছে। এখানে employee_id হল Foreign Key, যা প্রত্যেক কর্মীর প্রাথমিক তথ্য ধরে রাখবে।

3. employee_emergency_contacts

Field NameData TypeDescription
emergency_contact_idINT (PK)জরুরি যোগাযোগের আইডি
employee_idINT (FK)কর্মীর আইডি
contact_nameVARCHAR(100)জরুরি যোগাযোগের ব্যক্তির নাম
relationshipVARCHAR(50)সম্পর্ক (Father, Mother, Friend, etc.)
phone_numberVARCHAR(15)জরুরি ফোন নম্বর
alternate_phoneVARCHAR(15)বিকল্প ফোন নম্বর
created_atTIMESTAMPতৈরি করার তারিখ
updated_atTIMESTAMPআপডেট করার তারিখ
রিলেশন: employee_emergency_contacts টেবিলের employee_id ফিল্ডটি employees টেবিলের সাথে সংযুক্ত থাকবে, যা প্রতিটি কর্মীর জরুরি যোগাযোগের তথ্যকে তার মূল রেকর্ডের সাথে সংযুক্ত রাখবে। এই টেবিলটি একাধিক জরুরি যোগাযোগের তথ্য সংরক্ষণ করতে পারে এবং প্রতিটি তথ্য একটি নির্দিষ্ট কর্মীর অধীনে থাকবে।

4. employee_job_details

Field NameData TypeDescription
job_detail_idINT (PK)চাকরির বিস্তারিত আইডি
employee_idINT (FK)কর্মীর আইডি
department_idINT (FK)ডিপার্টমেন্ট আইডি
designation_idINT (FK)পদবী আইডি
join_dateDATEযোগদানের তারিখ
locationVARCHAR(100)কর্মক্ষেত্রের অবস্থান
reporting_managerINT (FK)রিপোর্টিং ম্যানেজার আইডি
employment_statusENUMকর্মসংস্থানের অবস্থা (Active, On Leave)
created_atTIMESTAMPতৈরি করার তারিখ
updated_atTIMESTAMPআপডেট করার তারিখ
রিলেশন: employee_job_details টেবিলের employee_id ফিল্ডটি employees টেবিলের সাথে সংযুক্ত থাকবে এবং department_id এবং designation_id ফিল্ডগুলো departments এবং designations টেবিলের সাথে সম্পর্কিত থাকবে, যা কর্মীর বিভাগ এবং পদবী সংরক্ষণ করে। এর ফলে প্রতিটি কর্মী নির্দিষ্ট পদের অধীনে কোন ডিপার্টমেন্টে কাজ করছেন তা নির্দিষ্ট হবে।

5. employee_salary_details

Field NameData TypeDescription
salary_idINT (PK)বেতন তথ্যের আইডি
employee_idINT (FK)কর্মীর আইডি
base_salaryDECIMAL(10,2)মূল বেতন
allowanceDECIMAL(10,2)ভাতা
deductionsDECIMAL(10,2)কাটা
net_salaryDECIMAL(10,2)নেট বেতন
effective_dateDATEকার্যকরী তারিখ
created_atTIMESTAMPতৈরি করার তারিখ
updated_atTIMESTAMPআপডেট করার তারিখ
রিলেশন: employee_salary_details টেবিলের employee_id ফিল্ডটি employees টেবিলের সাথে সংযুক্ত থাকবে। এখানে কর্মীর বেতন কাঠামোর বিস্তারিত তথ্য থাকবে, এবং এটি effective_date ফিল্ডের মাধ্যমে প্রতিটি বেতন পরিবর্তনের তারিখ সংরক্ষণ করবে।

6. employee_documents

Field NameData TypeDescription
document_idINT (PK)নথির আইডি
employee_idINT (FK)কর্মীর আইডি
document_typeVARCHAR(50)নথির ধরণ (ID Proof, Address Proof, etc.)
document_urlTEXTনথির অবস্থান (URL বা স্টোরেজ পাথ)
expiry_dateDATEনথির মেয়াদ উত্তীর্ণের তারিখ
created_atTIMESTAMPতৈরি করার তারিখ
updated_atTIMESTAMPআপডেট করার তারিখ
রিলেশন: employee_documents টেবিলের employee_id ফিল্ডটি employees টেবিলের সাথে সংযুক্ত থাকবে, যা নিশ্চিত করবে যে প্রতিটি ডকুমেন্ট নির্দিষ্ট কর্মীর সাথে সম্পর্কিত। প্রতিটি ডকুমেন্টের ধরন এবং মেয়াদ উত্তীর্ণের তারিখ আলাদাভাবে সংরক্ষণ করা হয়, এবং এটি কর্মী সম্পর্কিত নথির তথ্যকে ট্র্যাক করতে সহায়ক।

7. employee_dependents

Field NameData TypeDescription
dependent_idINT (PK)নির্ভরশীলের আইডি
employee_idINT (FK)কর্মীর আইডি
dependent_nameVARCHAR(100)নির্ভরশীল ব্যক্তির নাম
relationshipVARCHAR(50)সম্পর্ক (Child, Spouse, etc.)
date_of_birthDATEনির্ভরশীলের জন্ম তারিখ
created_atTIMESTAMPতৈরি করার তারিখ
updated_atTIMESTAMPআপডেট করার তারিখ
রিলেশন: employee_dependents টেবিলের employee_id ফিল্ডটি employees টেবিলের সাথে সংযুক্ত থাকবে। এই টেবিলে কর্মীর নির্ভরশীল ব্যক্তিদের তথ্য সংরক্ষিত থাকবে যেমন তাদের নাম, সম্পর্ক এবং জন্ম তারিখ, যা প্রতিটি নির্ভরশীলকে সংশ্লিষ্ট কর্মীর সাথে যুক্ত রাখে।

8. employee_bank_details

Field NameData TypeDescription
bank_detail_idINT (PK)ব্যাংক তথ্যের আইডি
employee_idINT (FK)কর্মীর আইডি
bank_nameVARCHAR(100)ব্যাংকের নাম
account_numberVARCHAR(20)ব্যাংক অ্যাকাউন্ট নম্বর
ifsc_codeVARCHAR(15)IFSC কোড
branch_nameVARCHAR(50)শাখার নাম
created_atTIMESTAMPতৈরি করার তারিখ
updated_atTIMESTAMPআপডেট করার তারিখ
রিলেশন: employee_bank_details টেবিলের employee_id ফিল্ডটি employees টেবিলের সাথে সংযুক্ত থাকবে, যা প্রতিটি কর্মীর ব্যাংক তথ্য নিশ্চিত করবে। এতে ব্যাংক অ্যাকাউন্টের তথ্য, ব্যাংকের নাম এবং শাখার বিবরণ থাকে যা পে-রোল প্রসেসিংয়ে সহায়ক।

9. employee_work_history

Field NameData TypeDescription
work_history_idINT (PK)কাজের ইতিহাসের আইডি
employee_idINT (FK)কর্মীর আইডি
company_nameVARCHAR(100)পূর্ববর্তী কোম্পানির নাম
job_titleVARCHAR(100)পূর্ববর্তী পদবী
start_dateDATEকাজের শুরু তারিখ
end_dateDATEকাজের শেষ তারিখ
descriptionTEXTকাজের বিবরণ
রিলেশন: employee_work_history টেবিলের employee_id ফিল্ডটি employees টেবিলের সাথে সংযুক্ত থাকবে। এতে কর্মীর পূর্ববর্তী চাকরির তথ্য যেমন কোম্পানির নাম, পদবী, এবং কাজের সময়কাল সংরক্ষিত থাকবে, যা প্রতিটি কর্মীর কাজের অভিজ্ঞতা ট্র্যাক করার জন্য ব্যবহার করা হবে।

10. employee_status_log

Field NameData TypeDescription
status_log_idINT (PK)অবস্থা লগের আইডি
employee_idINT (FK)কর্মীর আইডি
statusENUMঅবস্থা (Active, Inactive, Terminated)
change_dateDATEঅবস্থা পরিবর্তনের তারিখ
remarksTEXTমন্তব্য
created_atTIMESTAMPতৈরি করার তারিখ
রিলেশন: employee_status_log টেবিলের employee_id ফিল্ডটি employees টেবিলের সাথে সংযুক্ত থাকবে। এই টেবিলটি কর্মীর চাকরির অবস্থা পরিবর্তনের লগ সংরক্ষণ করে, যেমন অবস্থা (Active, Inactive, Terminated) এবং পরিবর্তনের তারিখ।

কোম্পানি টেবিল সব টেবিল এর সাথে সংযোগ থাকবে না কেন ?

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

এই রিলেশনাল মডেলে যখন employee_id এর মাধ্যমে অন্যান্য টেবিল থেকে তথ্য সংগ্রহ করা হবে, তখন employees টেবিলের company_id দ্বারা কোম্পানির সাথে সম্পর্কটি বজায় থাকবে। উদাহরণস্বরূপ, যদি employee_salary_details টেবিল থেকে তথ্য সংগ্রহ করতে হয়, তবে employee_id ব্যবহার করে employees টেবিলের company_id পাওয়া যাবে।

সারমর্ম

  • অন্য টেবিলে company_id যুক্ত করার প্রয়োজন নেই, কারণ employees টেবিলের company_id ফিল্ডটি অন্যান্য টেবিলের তথ্যকে কোম্পানির সাথে সংযুক্ত করার জন্য যথেষ্ট।
  • ডেটাবেজ স্ট্রাকচার সহজ রাখার জন্য, company_id শুধুমাত্র employees টেবিলে থাকা সঠিক, যা প্রতিটি টেবিলের সাথে সংযোগ বজায় রাখতে পারবে।

উদাহরণ

ধরে নিই, employee_documents টেবিল থেকে একটি কর্মীর ডকুমেন্ট তথ্য পেতে হবে এবং তার সাথে সংশ্লিষ্ট কোম্পানি জানতে হবে। তখন SQL কুয়েরি হবে:

SELECT e.company_id, d.document_type, d.document_url
FROM employee_documents d
JOIN employees e ON d.employee_id = e.employee_id
WHERE d.employee_id = [specific_employee_id];

এভাবে, company_id এর সরাসরি প্রয়োজন ছাড়াই কোম্পানির তথ্য সংগ্রহ করা যাবে।

সুতরাং, employees টেবিলের মাধ্যমে সম্পর্কটি বজায় রেখে অন্য টেবিলগুলোতে company_id যুক্ত করা প্রয়োজন নেই।

How can we help?