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
}
यदि आपके पास एक customer_id है और खाता जानकारी चाहते हैं, तो आप customersaccounts और खातों में शामिल होते हैं:
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;