CREATE TABLE accounts(
account_id INT NOT NULL AUTO_INCREMENT,
customer_id INT( 4 ) NOT NULL ,
account_type ENUM( 'savings', 'credit' ) NOT NULL,
balance FLOAT( 9 ) NOT NULL,
PRIMARY KEY ( account_id )
)
and
CREATE TABLE customers(
customer_id INT NOT NULL AUTO_INCREMENT,
name VARCHAR(20) NOT NULL,
address VARCHAR(20) NOT NULL,
city VARCHAR(20) NOT NULL,
state VARCHAR(20) NOT NULL,
)
How do I create a 'relationship' between the two tables? I want each account to be 'assigned' one customer_id (to indicate who owns it).
নিজেকে জিজ্ঞাসা করতে হবে এটি 1 থেকে 1 টি সম্পর্ক বা অনেক সম্পর্কের মধ্যে 1 টি। অর্থাত, প্রতিটি অ্যাকাউন্টের কি গ্রাহক থাকে এবং প্রতিটি গ্রাহকের একটি অ্যাকাউন্ট থাকে? অথবা অ্যাকাউন্ট ছাড়া গ্রাহকরা থাকবেন। আপনার প্রশ্নটি পরেরটি বোঝায়।
আপনি যদি কঠোর 1 থেকে 1 টি সম্পর্ক রাখতে চান তবে কেবল দুটি টেবিল একত্রিত করুন।
CREATE TABLE customers(
customer_id INT NOT NULL AUTO_INCREMENT,
name VARCHAR(20) NOT NULL,
address VARCHAR(20) NOT NULL,
city VARCHAR(20) NOT NULL,
state VARCHAR(20) NOT NULL,
account_type ENUM( 'savings', 'credit' ) NOT NULL,
balance FLOAT( 9 ) NOT NULL,
)
অন্য ক্ষেত্রে, দুটি টেবিলের মধ্যে সম্পর্ক তৈরি করার সঠিক উপায় হ'ল একটি সম্পর্ক ছক তৈরি করা।
CREATE TABLE customersaccounts(
customer_id INT NOT NULL,
account_id INT NOT NULL,
PRIMARY KEY (customer_id, account_id)
FOREIGN KEY customer_id references customers (customer_id) on delete cascade,
FOREIGN KEY account_id references accounts (account_id) on delete cascade
}
তারপরে যদি আপনার গ্রাহক_আইড থাকে এবং অ্যাকাউন্টের তথ্য চান, আপনি গ্রাহক অ্যাকাউন্ট এবং অ্যাকাউন্টগুলিতে যোগদান করুন:
SELECT a.*
FROM customersaccounts ca
INNER JOIN accounts a ca.account_id=a.account_id
AND ca.customer_id=mycustomerid;
সূচকের কারণে এটি অন্ধভাবে দ্রুত হবে।
আপনি এমন একটি ভিউও তৈরি করতে পারেন যা সংযুক্ত গ্রাহকদের অ্যাকাউন্টের টেবিলটিকে আলাদা রাখার সময় আপনাকে প্রভাব দেয়
CREATE VIEW customeraccounts AS
SELECT a.*, c.* FROM customersaccounts ca
INNER JOIN accounts a ON ca.account_id=a.account_id
INNER JOIN customers c ON ca.customer_id=c.customer_id;