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關係,只需合併這兩個表。
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表的效果,同時保持它們分開
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中的account_id和customer_id之間的關聯實現了各個實體之間的關係。 – reaanb 2015-10-05 18:25:05
「這就是精神!」,只要它是InnoDB的MySQL,而不是MyISAM。另外,postgreqsl還有一些值得關注的MySQL有趣的功能。 – jgmjgm 2016-08-23 15:53:04