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).
Sie müssen sich fragen, ob dies eine 1: 1-Beziehung oder eine 1 von vielen Beziehungen ist. Das heißt, hat jedes Konto einen Kunden und jeder Kunde hat ein Konto. Oder wird es Kunden ohne Konten geben? Ihre Frage impliziert letzteres.
Wenn Sie eine strikte 1: 1-Beziehung haben möchten, führen Sie einfach die beiden Tabellen zusammen.
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,
)
Im anderen Fall besteht die richtige Methode zum Erstellen einer Beziehung zwischen zwei Tabellen darin, eine Beziehungstabelle zu erstellen.
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
}
Wenn Sie dann eine customer_id haben und die Kontoinformationen möchten, schließen Sie sich Kundenkonten und Konten an:
SELECT a.*
FROM customersaccounts ca
INNER JOIN accounts a ca.account_id=a.account_id
AND ca.customer_id=mycustomerid;
Aufgrund der Indizierung ist dies unglaublich schnell.
Sie können auch eine ANSICHT erstellen, die den Effekt der kombinierten Kundenkonten-Tabelle zeigt, während diese getrennt bleiben
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;