আমি জানি এই প্রশ্নটি পুরানো, তবে বছরের পর বছর ধরে এটি অনেক বেশি মনোযোগ পেয়েছে এবং আমি মনে করি এটির একটি ধারণা হারিয়েছে যা কাউকে অনুরূপ ক্ষেত্রে সহায়তা করতে পারে। আমি এটি এখানে সম্পূর্ণতার জন্য যুক্ত করছি।
আপনি যদি আপনার মূল ডাটাবেস স্কিমাটি পরিবর্তন করতে না পারেন, তবে অনেক ভাল উত্তর সরবরাহ করা হয়েছে এবং সমস্যাটি ঠিক ঠিক সমাধান করা হবে।
আপনি যদি নিজের স্কিমাটি পরিবর্তন করতে পারেন তবে আমি আপনার customer
টেবিলের এমন একটি ক্ষেত্র যুক্ত করার পরামর্শ দেব যা এই গ্রাহকের জন্য id
সর্বশেষ customer_data
রেকর্ড ধারণ করে :
CREATE TABLE customer (
id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
current_data_id INT UNSIGNED NULL DEFAULT NULL
);
CREATE TABLE customer_data (
id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
customer_id INT UNSIGNED NOT NULL,
title VARCHAR(10) NOT NULL,
forename VARCHAR(10) NOT NULL,
surname VARCHAR(10) NOT NULL
);
জিজ্ঞাসাবাদ গ্রাহকদের
জিজ্ঞাসা করা যতটা সহজ এবং দ্রুত তা হতে পারে:
SELECT c.*, d.title, d.forename, d.surname
FROM customer c
INNER JOIN customer_data d on d.id = c.current_data_id
WHERE ...;
গ্রাহক তৈরি বা আপডেট করার সময় অপূর্ণতা হ'ল অতিরিক্ত জটিলতা।
গ্রাহক আপডেট করা হচ্ছে
আপনি যখনই কোনও গ্রাহককে আপডেট করতে চান, আপনি customer_data
টেবিলে একটি নতুন রেকর্ড সন্নিবেশ করান এবং customer
রেকর্ডটি আপডেট করুন ।
INSERT INTO customer_data (customer_id, title, forename, surname) VALUES(2, 'Mr', 'John', 'Smith');
UPDATE customer SET current_data_id = LAST_INSERT_ID() WHERE id = 2;
গ্রাহক তৈরি করা হচ্ছে
গ্রাহক তৈরি করা customer
এন্ট্রি সন্নিবেশ করানো এবং তারপরে একই বিবৃতি চালানোর বিষয়:
INSERT INTO customer () VALUES ();
SET @customer_id = LAST_INSERT_ID();
INSERT INTO customer_data (customer_id, title, forename, surname) VALUES(@customer_id, 'Mr', 'John', 'Smith');
UPDATE customer SET current_data_id = LAST_INSERT_ID() WHERE id = @customer_id;
মোড়ক উম্মচন
গ্রাহক তৈরি / আপডেট করার অতিরিক্ত জটিলতা ভীতিজনক হতে পারে তবে এটি ট্রিগারগুলির সাথে সহজেই স্বয়ংক্রিয়ভাবে তৈরি করা যেতে পারে।
অবশেষে, আপনি যদি একটি ওআরএম ব্যবহার করেন তবে এটি পরিচালনা করা সত্যিই সহজ হতে পারে। ওআরএম আপনার জন্য মানগুলি সন্নিবেশ করা, আইডিকে আপডেট করতে এবং দুটি টেবিলে স্বয়ংক্রিয়ভাবে যোগদানের যত্ন নিতে পারে।
আপনার পরিবর্তনযোগ্য Customer
মডেলটি দেখতে কেমন হবে তা এখানে :
class Customer
{
private int id;
private CustomerData currentData;
public Customer(String title, String forename, String surname)
{
this.update(title, forename, surname);
}
public void update(String title, String forename, String surname)
{
this.currentData = new CustomerData(this, title, forename, surname);
}
public String getTitle()
{
return this.currentData.getTitle();
}
public String getForename()
{
return this.currentData.getForename();
}
public String getSurname()
{
return this.currentData.getSurname();
}
}
এবং আপনার অপরিবর্তনীয় CustomerData
মডেল, এতে কেবল গেটার রয়েছে:
class CustomerData
{
private int id;
private Customer customer;
private String title;
private String forename;
private String surname;
public CustomerData(Customer customer, String title, String forename, String surname)
{
this.customer = customer;
this.title = title;
this.forename = forename;
this.surname = surname;
}
public String getTitle()
{
return this.title;
}
public String getForename()
{
return this.forename;
}
public String getSurname()
{
return this.surname;
}
}