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).
당신은 이것이 일대일 관계인지 아니면 여러 관계 중 일대일 관계인지 스스로에게 물어봐야합니다. 즉, 모든 계정에는 고객이 있고 모든 고객은 계정이 있습니다. 아니면 계정이없는 고객이있을 것입니다. 귀하의 질문은 후자를 의미합니다.
엄격한 일대일 관계를 원하면 두 테이블을 병합하십시오.
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;
인덱싱 때문에 이것은 눈부시게 빠를 것입니다.
결합 된 customersaccounts 테이블의 효과를 제공하는 VIEW를 생성 할 수도 있습니다.
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;