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;
Из-за индексации это будет Ослепительно быстро.
Вы также можете создать VIEW, который дает вам эффект комбинированной таблицы customersaccounts, сохраняя их отдельно
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;
«Я ОТКАЗАТЬСЯ для изучения доступа, я буду изучать двигатель РЕАЛ базы данных: MySQL» Это дух! Поздравляем = D – Metafaniel 2015-08-24 18:10:05
Обратите внимание, что ограничения внешнего ключа не реализуют отношения, они реализуют целостность. Связь между account_id и customer_id в таблице учетных записей реализует взаимосвязь между соответствующими объектами. – reaanb 2015-10-05 18:25:05
«Это дух!», Если это mysql с InnoDB, а не MyISAM. Также postgreqsl имеет несколько интересных функций над MySQL, на которые стоит обратить внимание. – jgmjgm 2016-08-23 15:53:04